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 – NEMO

Changeset 434


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

Location:
trunk/NEMO/OPA_SRC
Files:
1 added
12 edited

Legend:

Unmodified
Added
Removed
  • trunk/NEMO/OPA_SRC/DOM/domcfg.F90

    r247 r434  
    145145         WRITE(numout,25)              (mi1(ji),ji = 1,jpidta) 
    146146         WRITE(numout,*) 
    147          WRITE(numout,*) '          conversion local  ==> data i-index domain' 
     147         WRITE(numout,*) '          conversion local  ==> data j-index domain' 
    148148         WRITE(numout,25)              (mjg(jj),jj = 1,jpj) 
    149149         WRITE(numout,*) 
    150          WRITE(numout,*) '          conversion data  ==> local i-index domain' 
     150         WRITE(numout,*) '          conversion data  ==> local j-index domain' 
    151151         WRITE(numout,*) '             starting index' 
    152152         WRITE(numout,25)              (mj0(jj),jj = 1,jpjdta) 
  • trunk/NEMO/OPA_SRC/DOM/domhgr.F90

    r418 r434  
    1313   USE phycst          ! physical constants 
    1414   USE in_out_manager  ! I/O manager 
     15   USE lib_mpp 
    1516 
    1617   IMPLICIT NONE 
     
    106107         ztj, zuj, zvj, zfj,         &  ! 
    107108         zphi0, zbeta, znorme,       &  ! 
    108          zarg, zf0 
     109         zarg, zf0, zminff, zmaxff 
    109110      REAL(wp) ::   & 
    110111         zlam1, zcos_alpha, zim1 , zjm1 , ze1, ze1deg,   & 
     
    442443          
    443444         IF(lwp) WRITE(numout,*)  
    444          IF(lwp) WRITE(numout,*) ' Beta-plane: Beta parameter = constant = ', ff(1,1) 
    445          IF(lwp) WRITE(numout,*) ' Coriolis parameter varies from ', ff(1,1),' to ', ff(1,jpj) 
    446  
    447       CASE ( 5 )                     ! beta-plane and rotated domain 
     445         IF(lwp) WRITE(numout,*) ' Beta-plane: Beta parameter = constant = ', ff(nldi,nldj) 
     446         IF(lwp) WRITE(numout,*) ' Coriolis parameter varies from ', ff(nldi,nldj),' to ', ff(nldi,nlej) 
     447         IF( lk_mpp ) THEN  
     448            zminff=ff(nldi,nldj) 
     449            zmaxff=ff(nldi,nlej) 
     450            CALL mpp_min( zminff )   ! min over the global domain 
     451            CALL mpp_max( zmaxff )   ! max over the global domain 
     452            IF(lwp) WRITE(numout,*) ' Coriolis parameter varies globally from ', zminff,' to ', zmaxff 
     453         END IF 
     454 
     455      CASE ( 5 )                     ! beta-plane and rotated domain (gyre configuration) 
    448456 
    449457         zbeta = 2. * omega * COS( rad * ppgphi0 ) / ra                     ! beta at latitude ppgphi0 
     
    453461         ff(:,:) = ( zf0 + zbeta * ABS( gphif(:,:) - zphi0 ) * rad * ra )   ! f = f0 +beta* y ( y=0 at south) 
    454462 
    455          IF(lwp) WRITE(numout,*) '          Beta-plane: Beta parameter = constant = ', ff(1,1) 
    456          IF(lwp) WRITE(numout,*) '                      Coriolis parameter varies from ', ff(1,1),' to ', ff(1,jpj) 
     463         IF(lwp) WRITE(numout,*) ' Beta-plane and rotated domain : ' 
     464         IF(lwp) WRITE(numout,*) ' Coriolis parameter varies in this processor from ', ff(nldi,nldj),' to ', ff(nldi,nlej) 
     465         IF( lk_mpp ) THEN  
     466            zminff=ff(nldi,nldj) 
     467            zmaxff=ff(nldi,nlej) 
     468            CALL mpp_min( zminff )   ! min over the global domain 
     469            CALL mpp_max( zmaxff )   ! max over the global domain 
     470            IF(lwp) WRITE(numout,*) ' Coriolis parameter varies globally from ', zminff,' to ', zmaxff 
     471         END IF 
    457472 
    458473      END SELECT 
  • trunk/NEMO/OPA_SRC/DTA/dtasal.F90

    r392 r434  
    7979         imois, iman, ik, i15,       &  ! temporary integers 
    8080         ipi, ipj, ipk, itime           !    "          " 
    81 #  if defined key_tradmp 
     81#if defined key_tradmp 
    8282      INTEGER ::   & 
    8383         jk, il0, il1,               &  ! temporary integers 
    8484         ii0, ii1, ij0, ij1             !    "          " 
    85 # endif 
     85#endif 
    8686      INTEGER, DIMENSION(jpmois) ::   istep 
    8787      REAL(wp) ::   & 
     
    9191      !!---------------------------------------------------------------------- 
    9292 
    93  
    94       ! 0. Initialization 
    95       ! ----------------- 
    96  
    97       iman  = jpmois 
    98       i15   = nday / 16 
    99  
    100       imois = nmonth + i15 - 1 
    101       IF( imois == 0 ) imois = iman 
    102  
    103       itime = jpmois 
    104       ipi=jpiglo 
    105       ipj=jpjglo 
    106       ipk = jpk 
    107  
    108       ! 1. First call kt=nit000 
    109       ! ----------------------- 
    110  
    111       IF( kt == nit000 .AND. nlecsa == 0 ) THEN 
    112          nsal1 = 0 
    113          IF(lwp) THEN 
    114             WRITE(numout,*) 
    115             WRITE(numout,*) ' dta_sal : monthly salinity data in NetCDF file' 
    116             WRITE(numout,*) ' ~~~~~~~' 
    117             WRITE(numout,*) 
     93      IF( cp_cfg /= 'gyre' ) THEN 
     94 
     95         ! 0. Initialization 
     96         ! ----------------- 
     97 
     98         iman  = jpmois 
     99         i15   = nday / 16 
     100 
     101         imois = nmonth + i15 - 1 
     102         IF( imois == 0 ) imois = iman 
     103 
     104         itime = jpmois 
     105         ipi=jpiglo 
     106         ipj=jpjglo 
     107         ipk = jpk 
     108 
     109         ! 1. First call kt=nit000 
     110         ! ----------------------- 
     111 
     112         IF( kt == nit000 .AND. nlecsa == 0 ) THEN 
     113            nsal1 = 0 
     114            IF(lwp) THEN 
     115               WRITE(numout,*) 
     116               WRITE(numout,*) ' dta_sal : monthly salinity data in NetCDF file' 
     117               WRITE(numout,*) ' ~~~~~~~' 
     118               WRITE(numout,*) 
     119            ENDIF 
     120 
     121            ! open file 
     122             
     123            clname = 'data_1m_salinity_nomask' 
     124#if defined key_agrif 
     125            if ( .NOT. Agrif_Root() ) then 
     126               clname = TRIM(Agrif_CFixed())//'_'//TRIM(clname) 
     127            endif 
     128#endif              
     129            CALL flinopen(TRIM(clname),mig(1),nlci,mjg(1),nlcj,.FALSE.   & 
     130                 ,ipi,ipj,ipk,zlon,zlat,zlev,itime,istep,zdate0,rdt,numsdt) 
     131 
     132            ! title, dimensions and tests 
     133 
     134            IF( itime /= jpmois ) THEN 
     135               IF(lwp) THEN 
     136                  WRITE(numout,*) 
     137                  WRITE(numout,*) 'problem with time coordinates' 
     138                  WRITE(numout,*) ' itime ',itime,' jpmois ',jpmois 
     139               ENDIF 
     140               STOP 'dta_sal' 
     141            ENDIF 
     142            IF( ipi /= jpidta .OR. ipj /= jpjdta .OR. ipk /= jpk ) THEN 
     143               IF(lwp) THEN 
     144                  WRITE(numout,*) 
     145                  WRITE(numout,*) 'problem with dimensions' 
     146                  WRITE(numout,*) ' ipi ',ipi,' jpidta ',jpidta 
     147                  WRITE(numout,*) ' ipj ',ipj,' jpjdta ',jpjdta 
     148                  WRITE(numout,*) ' ipk ',ipk,' jpk ',jpk 
     149               ENDIF 
     150               STOP 'dta_sal' 
     151            ENDIF 
     152            IF(lwp)WRITE(numout,*) itime,istep,zdate0,rdt,numsdt 
     153 
    118154         ENDIF 
    119155 
    120          ! open file 
    121           
    122          clname = 'data_1m_salinity_nomask' 
    123 #if defined key_agrif 
    124          if ( .NOT. Agrif_Root() ) then 
    125             clname = TRIM(Agrif_CFixed())//'_'//TRIM(clname) 
    126          endif 
    127 #endif           
    128          CALL flinopen(TRIM(clname),mig(1),nlci,mjg(1),nlcj,.FALSE.   & 
    129               ,ipi,ipj,ipk,zlon,zlat,zlev,itime,istep,zdate0,rdt,numsdt) 
    130  
    131          ! title, dimensions and tests 
    132  
    133          IF( itime /= jpmois ) THEN 
     156 
     157         ! 2. Read monthly file 
     158         ! ------------------- 
     159 
     160         IF( ( kt == nit000 .AND. nlecsa == 0) .OR. imois /= nsal1 ) THEN 
     161            nlecsa = 1 
     162             
     163            ! 2.1 Calendar computation 
     164             
     165            nsal1 = imois        ! first file record used  
     166            nsal2 = nsal1 + 1    ! last  file record used 
     167            nsal1 = MOD( nsal1, iman ) 
     168            IF( nsal1 == 0 ) nsal1 = iman 
     169            nsal2 = MOD( nsal2, iman ) 
     170            IF( nsal2 == 0 ) nsal2 = iman 
     171            IF(lwp) WRITE(numout,*) 'first record file used nsal1 ', nsal1 
     172            IF(lwp) WRITE(numout,*) 'last  record file used nsal2 ', nsal2 
     173             
     174            ! 2.3 Read monthly salinity data Levitus  
     175 
     176            CALL flinget(numsdt,'vosaline',jpidta,jpjdta,jpk,jpmois,nsal1,   & 
     177              nsal1,mig(1),nlci,mjg(1),nlcj,saldta(1:nlci,1:nlcj,1:jpk,1)) 
     178 
     179            CALL flinget(numsdt,'vosaline',jpidta,jpjdta,jpk,jpmois,nsal2,   & 
     180              nsal2,mig(1),nlci,mjg(1),nlcj,saldta(1:nlci,1:nlcj,1:jpk,2)) 
     181 
     182             
    134183            IF(lwp) THEN 
    135184               WRITE(numout,*) 
    136                WRITE(numout,*) 'problem with time coordinates' 
    137                WRITE(numout,*) ' itime ',itime,' jpmois ',jpmois 
    138             ENDIF 
    139             STOP 'dta_sal' 
    140          ENDIF 
    141          IF( ipi /= jpidta .OR. ipj /= jpjdta .OR. ipk /= jpk ) THEN 
     185               WRITE(numout,*) ' read Levitus salinity ok' 
     186               WRITE(numout,*) 
     187            ENDIF 
     188             
     189#if defined key_tradmp 
     190            IF( cp_cfg == "orca"  .AND. jp_cfg == 2 ) THEN 
     191 
     192               !                                        ! ======================= 
     193               !                                        !  ORCA_R2 configuration 
     194               !                                        ! ======================= 
     195               ij0 = 101   ;   ij1 = 109 
     196               ii0 = 141   ;   ii1 = 155    
     197               DO jj = mj0(ij0), mj1(ij1)                      ! Reduced salinity in the Alboran Sea 
     198                  DO ji = mi0(ii0), mi1(ii1) 
     199                     DO jk = 13, 13 
     200                        saldta(ji,jj,jk,:) = saldta(ji,jj,jk,:) - 0.15 
     201                     END DO 
     202                     DO jk = 14, 15 
     203                        saldta(ji,jj,jk,:) = saldta(ji,jj,jk,:) - 0.25 
     204                     END DO 
     205                     DO jk = 16, 17 
     206                        saldta(ji,jj,jk,:) = saldta(ji,jj,jk,:) - 0.30 
     207                     END DO 
     208                     DO jk = 18, 25 
     209                        saldta(ji,jj,jk,:) = saldta(ji,jj,jk,:) - 0.35 
     210                     END DO 
     211                  END DO 
     212               END DO 
     213               IF( n_cla == 1 ) THEN  
     214                  !                                         ! New salinity profile at Gibraltar 
     215                  il0 = 138   ;   il1 = 138    
     216                  ij0 = 101   ;   ij1 = 101 
     217                  ii0 = 139   ;   ii1 = 139    
     218                  saldta( mi0(ii0):mi1(ii1), mj0(ij0):mj1(ij1) , : , : ) =   & 
     219                     &                                    saldta( mi0(il0):mi1(il1) , mj0(ij0):mj1(ij1) , : , : ) 
     220                  ij0 = 101   ;   ij1 = 101 
     221                  saldta( mi0(ii0):mi1(ii1), mj0(ij0):mj1(ij1) , : , : ) =   & 
     222                     &                                    saldta( mi0(il0):mi1(il1) , mj0(ij0):mj1(ij1) , : , : ) 
     223                  il0 = 138   ;   il1 = 138    
     224                  ij0 = 101   ;   ij1 = 102 
     225                  ii0 = 139   ;   ii1 = 139    
     226                  DO jl = mi0(il0), mi1(il1)                ! New salinity profile at Gibraltar 
     227                     DO jj = mj0(ij0), mj1(ij1) 
     228                        DO ji = mi0(ii0), mi1(ii1) 
     229                           saldta(ji,jj,:,:) = saldta(jl,jj,:,:) 
     230                        END DO 
     231                     END DO 
     232                  END DO 
     233 
     234                  il0 = 164   ;   il1 = 164    
     235                  ij0 =  88   ;   ij1 =  88 
     236                  ii0 = 161   ;   ii1 = 163    
     237                  DO jl = mi0(il0), mi1(il1)                ! New salinity profile at Bab el Mandeb 
     238                     DO jj = mj0(ij0), mj1(ij1) 
     239                        DO ji = mi0(ii0), mi1(ii1) 
     240                           saldta(ji,jj,:,:) = saldta(jl,jj,:,:) 
     241                        END DO 
     242                     END DO 
     243                     ij0 =  87   ;   ij1 =  87 
     244                     DO jj = mj0(ij0), mj1(ij1) 
     245                        DO ji = mi0(ii0), mi1(ii1) 
     246                           saldta(ji,jj,:,:) = saldta(jl,jj,:,:) 
     247                        END DO 
     248                     END DO 
     249                  END DO 
     250 
     251               ENDIF 
     252 
     253            ENDIF 
     254#endif    
     255             
     256            !                                     ! Mask 
     257            DO jl = 1, 2 
     258               saldta(:,:,:,jl) = saldta(:,:,:,jl)*tmask(:,:,:) 
     259               saldta(:,:,jpk,jl) = 0. 
     260               IF( lk_zps ) THEN                   ! z-coord. partial steps 
     261                  DO jj = 1, jpj                           ! interpolation of salinity at the last ocean level (i.e. the partial step) 
     262                     DO ji = 1, jpi 
     263                        ik = mbathy(ji,jj) - 1 
     264                        IF( ik > 2 ) THEN 
     265                           zl = ( gdept(ik) - fsdept(ji,jj,ik) ) / ( gdept(ik) - gdept(ik-1) ) 
     266                           saldta(ji,jj,ik,jl) = (1.-zl) * saldta(ji,jj,ik,jl) +zl * saldta(ji,jj,ik-1,jl)  
     267                        ENDIF 
     268                     END DO 
     269                  END DO 
     270               ENDIF 
     271            END DO 
     272             
     273 
    142274            IF(lwp) THEN 
    143                WRITE(numout,*) 
    144                WRITE(numout,*) 'problem with dimensions' 
    145                WRITE(numout,*) ' ipi ',ipi,' jpidta ',jpidta 
    146                WRITE(numout,*) ' ipj ',ipj,' jpjdta ',jpjdta 
    147                WRITE(numout,*) ' ipk ',ipk,' jpk ',jpk 
    148             ENDIF 
    149             STOP 'dta_sal' 
    150          ENDIF 
    151          IF(lwp)WRITE(numout,*) itime,istep,zdate0,rdt,numsdt 
    152  
    153       ENDIF 
    154  
    155  
    156       ! 2. Read monthly file 
    157       ! ------------------- 
    158  
    159       IF( ( kt == nit000 .AND. nlecsa == 0) .OR. imois /= nsal1 ) THEN 
    160          nlecsa = 1 
    161           
    162          ! 2.1 Calendar computation 
    163           
    164          nsal1 = imois        ! first file record used  
    165          nsal2 = nsal1 + 1    ! last  file record used 
    166          nsal1 = MOD( nsal1, iman ) 
    167          IF( nsal1 == 0 ) nsal1 = iman 
    168          nsal2 = MOD( nsal2, iman ) 
    169          IF( nsal2 == 0 ) nsal2 = iman 
    170          IF(lwp) WRITE(numout,*) 'first record file used nsal1 ', nsal1 
    171          IF(lwp) WRITE(numout,*) 'last  record file used nsal2 ', nsal2 
    172           
    173          ! 2.3 Read monthly salinity data Levitus  
    174  
    175          CALL flinget(numsdt,'vosaline',jpidta,jpjdta,jpk,jpmois,nsal1,   & 
    176            nsal1,mig(1),nlci,mjg(1),nlcj,saldta(1:nlci,1:nlcj,1:jpk,1)) 
    177  
    178          CALL flinget(numsdt,'vosaline',jpidta,jpjdta,jpk,jpmois,nsal2,   & 
    179            nsal2,mig(1),nlci,mjg(1),nlcj,saldta(1:nlci,1:nlcj,1:jpk,2)) 
    180  
    181           
    182          IF(lwp) THEN 
    183             WRITE(numout,*) 
    184             WRITE(numout,*) ' read Levitus salinity ok' 
    185             WRITE(numout,*) 
     275               WRITE(numout,*)' salinity Levitus month ',nsal1,nsal2 
     276               WRITE(numout,*) 
     277               WRITE(numout,*) ' Levitus month = ',nsal1,'  level = 1' 
     278               CALL prihre(saldta(:,:,1,1),jpi,jpj,1,jpi,20,1,jpj,20,1.,numout) 
     279               WRITE(numout,*) ' Levitus month = ',nsal1,'  level = ',jpk/2 
     280               CALL prihre(saldta(:,:,jpk/2,1),jpi,jpj,1,jpi,20,1,jpj,20,1.,numout) 
     281               WRITE(numout,*) ' Levitus month = ',nsal1,'  level = ',jpkm1 
     282               CALL prihre(saldta(:,:,jpkm1,1),jpi,jpj,1,jpi,20,1,jpj,20,1.,numout) 
     283            ENDIF 
    186284         ENDIF 
    187285          
    188 #  if defined key_tradmp 
    189          IF( cp_cfg == "orca"  .AND. jp_cfg == 2 ) THEN 
    190  
    191             !                                        ! ======================= 
    192             !                                        !  ORCA_R2 configuration 
    193             !                                        ! ======================= 
    194             ij0 = 101   ;   ij1 = 109 
    195             ii0 = 141   ;   ii1 = 155    
    196             DO jj = mj0(ij0), mj1(ij1)                      ! Reduced salinity in the Alboran Sea 
    197                DO ji = mi0(ii0), mi1(ii1) 
    198                   DO jk = 13, 13 
    199                      saldta(ji,jj,jk,:) = saldta(ji,jj,jk,:) - 0.15 
    200                   END DO 
    201                   DO jk = 14, 15 
    202                      saldta(ji,jj,jk,:) = saldta(ji,jj,jk,:) - 0.25 
    203                   END DO 
    204                   DO jk = 16, 17 
    205                      saldta(ji,jj,jk,:) = saldta(ji,jj,jk,:) - 0.30 
    206                   END DO 
    207                   DO jk = 18, 25 
    208                      saldta(ji,jj,jk,:) = saldta(ji,jj,jk,:) - 0.35 
    209                   END DO 
    210                END DO 
    211             END DO 
    212             IF( n_cla == 1 ) THEN  
    213                !                                         ! New salinity profile at Gibraltar 
    214                il0 = 138   ;   il1 = 138    
    215                ij0 = 101   ;   ij1 = 101 
    216                ii0 = 139   ;   ii1 = 139    
    217                saldta( mi0(ii0):mi1(ii1), mj0(ij0):mj1(ij1) , : , : ) =   & 
    218                   &                                    saldta( mi0(il0):mi1(il1) , mj0(ij0):mj1(ij1) , : , : ) 
    219                ij0 = 101   ;   ij1 = 101 
    220                saldta( mi0(ii0):mi1(ii1), mj0(ij0):mj1(ij1) , : , : ) =   & 
    221                   &                                    saldta( mi0(il0):mi1(il1) , mj0(ij0):mj1(ij1) , : , : ) 
    222                il0 = 138   ;   il1 = 138    
    223                ij0 = 101   ;   ij1 = 102 
    224                ii0 = 139   ;   ii1 = 139    
    225                DO jl = mi0(il0), mi1(il1)                ! New salinity profile at Gibraltar 
    226                   DO jj = mj0(ij0), mj1(ij1) 
    227                      DO ji = mi0(ii0), mi1(ii1) 
    228                         saldta(ji,jj,:,:) = saldta(jl,jj,:,:) 
    229                      END DO 
    230                   END DO 
    231                END DO 
    232  
    233                il0 = 164   ;   il1 = 164    
    234                ij0 =  88   ;   ij1 =  88 
    235                ii0 = 161   ;   ii1 = 163    
    236                DO jl = mi0(il0), mi1(il1)                ! New salinity profile at Bab el Mandeb 
    237                   DO jj = mj0(ij0), mj1(ij1) 
    238                      DO ji = mi0(ii0), mi1(ii1) 
    239                         saldta(ji,jj,:,:) = saldta(jl,jj,:,:) 
    240                      END DO 
    241                   END DO 
    242                   ij0 =  87   ;   ij1 =  87 
    243                   DO jj = mj0(ij0), mj1(ij1) 
    244                      DO ji = mi0(ii0), mi1(ii1) 
    245                         saldta(ji,jj,:,:) = saldta(jl,jj,:,:) 
    246                      END DO 
    247                   END DO 
    248                END DO 
    249  
    250             ENDIF 
    251  
    252          ENDIF 
    253 #endif 
    254           
    255          !                                     ! Mask 
    256          DO jl = 1, 2 
    257             saldta(:,:,:,jl) = saldta(:,:,:,jl)*tmask(:,:,:) 
    258             saldta(:,:,jpk,jl) = 0. 
    259             IF( lk_zps ) THEN                   ! z-coord. partial steps 
    260                DO jj = 1, jpj                           ! interpolation of salinity at the last ocean level (i.e. the partial step) 
    261                   DO ji = 1, jpi 
    262                      ik = mbathy(ji,jj) - 1 
    263                      IF( ik > 2 ) THEN 
    264                         zl = ( gdept(ik) - fsdept(ji,jj,ik) ) / ( gdept(ik) - gdept(ik-1) ) 
    265                         saldta(ji,jj,ik,jl) = (1.-zl) * saldta(ji,jj,ik,jl) +zl * saldta(ji,jj,ik-1,jl)  
    266                      ENDIF 
    267                   END DO 
    268                END DO 
    269             ENDIF 
    270          END DO 
    271           
    272  
    273          IF(lwp) THEN 
    274             WRITE(numout,*)' salinity Levitus month ',nsal1,nsal2 
    275             WRITE(numout,*) 
    276             WRITE(numout,*) ' Levitus month = ',nsal1,'  level = 1' 
    277             CALL prihre(saldta(:,:,1,1),jpi,jpj,1,jpi,20,1,jpj,20,1.,numout) 
    278             WRITE(numout,*) ' Levitus month = ',nsal1,'  level = ',jpk/2 
    279             CALL prihre(saldta(:,:,jpk/2,1),jpi,jpj,1,jpi,20,1,jpj,20,1.,numout) 
    280             WRITE(numout,*) ' Levitus month = ',nsal1,'  level = ',jpkm1 
    281             CALL prihre(saldta(:,:,jpkm1,1),jpi,jpj,1,jpi,20,1,jpj,20,1.,numout) 
    282          ENDIF 
     286  
     287         ! 3. At every time step compute salinity data 
     288         ! ------------------------------------------- 
     289 
     290         zxy = FLOAT(nday + 15 - 30*i15)/30. 
     291         s_dta(:,:,:) = ( 1.- zxy ) * saldta(:,:,:,1) + zxy * saldta(:,:,:,2) 
     292 
    283293      ENDIF 
    284        
    285   
    286       ! 3. At every time step compute salinity data 
    287       ! ------------------------------------------- 
    288  
    289       zxy = FLOAT(nday + 15 - 30*i15)/30. 
    290       s_dta(:,:,:) = ( 1.- zxy ) * saldta(:,:,:,1) + zxy * saldta(:,:,:,2) 
    291294 
    292295   END SUBROUTINE dta_sal 
  • trunk/NEMO/OPA_SRC/DTA/dtatem.F90

    r392 r434  
    9898      !!---------------------------------------------------------------------- 
    9999 
    100       cl_tdata = 'data_1m_potential_temperature_nomask ' 
    101  
     100      IF( cp_cfg /= 'gyre' ) THEN 
     101 
     102         ! 0. Initialization 
     103         ! ----------------- 
     104 
     105         iman  = jpmois 
     106         i15   = nday / 16 
     107         imois = nmonth + i15 - 1 
     108         IF( imois == 0 )   imois = iman 
     109 
     110         itime = jpmois 
     111         ipi = jpiglo 
     112         ipj = jpjglo 
     113         ipk = jpk 
     114 
     115         ! 1. First call kt=nit000 
     116         ! ----------------------- 
     117 
     118         IF( kt == nit000 .AND. nlecte == 0 ) THEN 
     119            ntem1 = 0 
     120            IF(lwp) WRITE(numout,*) 
     121            IF(lwp) WRITE(numout,*) ' dtatem : Levitus monthly fields' 
     122            IF(lwp) WRITE(numout,*) ' ~~~~~~' 
     123            IF(lwp) WRITE(numout,*) '             NetCDF FORMAT' 
     124            IF(lwp) WRITE(numout,*) 
     125             
     126            ! open file 
     127 
     128            cl_tdata = 'data_1m_potential_temperature_nomask ' 
    102129#if defined key_agrif 
    103       if ( .NOT. Agrif_Root() ) then 
    104          cl_tdata = TRIM(Agrif_CFixed())//'_'//TRIM(cl_tdata) 
    105       endif 
    106 #endif          
    107  
    108       ! 0. Initialization 
    109       ! ----------------- 
    110  
    111       iman  = jpmois 
    112       i15   = nday / 16 
    113       imois = nmonth + i15 - 1 
    114       IF( imois == 0 )   imois = iman 
    115  
    116       itime = jpmois 
    117       ipi = jpiglo 
    118       ipj = jpjglo 
    119       ipk = jpk 
    120  
    121       ! 1. First call kt=nit000 
    122       ! ----------------------- 
    123  
    124       IF( kt == nit000 .AND. nlecte == 0 ) THEN 
    125          ntem1 = 0 
    126          IF(lwp) WRITE(numout,*) 
    127          IF(lwp) WRITE(numout,*) ' dtatem : Levitus monthly fields' 
    128          IF(lwp) WRITE(numout,*) ' ~~~~~~' 
    129          IF(lwp) WRITE(numout,*) '             NetCDF FORMAT' 
    130          IF(lwp) WRITE(numout,*) 
     130            if ( .NOT. Agrif_Root() ) then 
     131               cl_tdata = TRIM(Agrif_CFixed())//'_'//TRIM(cl_tdata) 
     132            endif 
     133#endif             
     134            CALL flinopen( TRIM(cl_tdata), mig(1), nlci , mjg(1),  nlcj   & 
     135               &          , .false.     , ipi   , ipj  , ipk   , zlon     & 
     136               &          , zlat        , zlev  , itime, istep , zdate0   & 
     137               &          , rdt         , numtdt                        ) 
     138 
     139            ! title, dimensions and tests 
     140 
     141            IF( itime /= jpmois ) THEN 
     142               IF(lwp) THEN 
     143                  WRITE(numout,*) 
     144                  WRITE(numout,*) 'problem with time coordinates' 
     145                  WRITE(numout,*) ' itime ',itime,' jpmois ',jpmois 
     146               ENDIF 
     147               STOP 'dtatem' 
     148            ENDIF 
     149            IF( ipi /= jpidta .OR. ipj /= jpjdta .OR. ipk /= jpk ) THEN 
     150               IF(lwp) THEN 
     151                  WRITE(numout,*) 
     152                  WRITE(numout,*) 'problem with dimensions' 
     153                  WRITE(numout,*) ' ipi ',ipi,' jpidta ',jpidta 
     154                  WRITE(numout,*) ' ipj ',ipj,' jpjdta ',jpjdta 
     155                  WRITE(numout,*) ' ipk ',ipk,' jpk ',jpk 
     156               ENDIF 
     157               STOP 'dtatem' 
     158            ENDIF 
     159            IF(lwp) WRITE(numout,*) itime,istep,zdate0,rdt,numtdt 
     160 
     161         ENDIF 
     162 
     163 
     164         ! 2. Read monthly file 
     165         ! ------------------- 
     166 
     167         IF( ( kt == nit000 .AND. nlecte == 0 ) .OR. imois /= ntem1 ) THEN 
     168            nlecte = 1 
     169 
     170            ! Calendar computation 
     171             
     172            ntem1 = imois        ! first file record used  
     173            ntem2 = ntem1 + 1    ! last  file record used 
     174            ntem1 = MOD( ntem1, iman ) 
     175            IF( ntem1 == 0 )   ntem1 = iman 
     176            ntem2 = MOD( ntem2, iman ) 
     177            IF( ntem2 == 0 )   ntem2 = iman 
     178            IF(lwp) WRITE(numout,*) 'first record file used ntem1 ', ntem1 
     179            IF(lwp) WRITE(numout,*) 'last  record file used ntem2 ', ntem2 
     180             
     181            ! Read monthly temperature data Levitus  
     182             
     183            CALL flinget( numtdt, 'votemper', jpidta, jpjdta, jpk   & 
     184                        , jpmois, ntem1     , ntem1 , mig(1), nlci   & 
     185                        , mjg(1), nlcj      , temdta(1:nlci,1:nlcj,1:jpk,1)     ) 
     186            CALL flinget( numtdt, 'votemper', jpidta, jpjdta, jpk   & 
     187                        , jpmois, ntem2     , ntem2 , mig(1), nlci   & 
     188                        , mjg(1), nlcj      , temdta(1:nlci,1:nlcj,1:jpk,2)     ) 
     189 
     190            IF(lwp) WRITE(numout,*) 
     191            IF(lwp) WRITE(numout,*) ' read Levitus temperature ok' 
     192            IF(lwp) WRITE(numout,*) 
     193             
     194#if defined key_tradmp 
     195            IF( cp_cfg == "orca"  .AND. jp_cfg == 2 ) THEN 
    131196          
    132          ! open file 
    133  
    134          CALL flinopen( TRIM(cl_tdata), mig(1), nlci , mjg(1),  nlcj   & 
    135                       , .false.     , ipi   , ipj  , ipk   , zlon   & 
    136                       , zlat        , zlev  , itime, istep , zdate0   & 
    137                       , rdt         , numtdt                        ) 
    138  
    139          ! title, dimensions and tests 
    140  
    141          IF( itime /= jpmois ) THEN 
    142             IF(lwp) THEN 
    143                WRITE(numout,*) 
    144                WRITE(numout,*) 'problem with time coordinates' 
    145                WRITE(numout,*) ' itime ',itime,' jpmois ',jpmois 
    146             ENDIF 
    147             STOP 'dtatem' 
    148          ENDIF 
    149          IF( ipi /= jpidta .OR. ipj /= jpjdta .OR. ipk /= jpk ) THEN 
    150             IF(lwp) THEN 
    151                WRITE(numout,*) 
    152                WRITE(numout,*) 'problem with dimensions' 
    153                WRITE(numout,*) ' ipi ',ipi,' jpidta ',jpidta 
    154                WRITE(numout,*) ' ipj ',ipj,' jpjdta ',jpjdta 
    155                WRITE(numout,*) ' ipk ',ipk,' jpk ',jpk 
    156             ENDIF 
    157             STOP 'dtatem' 
    158          ENDIF 
    159          IF(lwp) WRITE(numout,*) itime,istep,zdate0,rdt,numtdt 
    160  
    161       ENDIF 
    162  
    163  
    164       ! 2. Read monthly file 
    165       ! ------------------- 
    166  
    167       IF( ( kt == nit000 .AND. nlecte == 0 ) .OR. imois /= ntem1 ) THEN 
    168          nlecte = 1 
    169  
    170          ! Calendar computation 
    171           
    172          ntem1 = imois        ! first file record used  
    173          ntem2 = ntem1 + 1    ! last  file record used 
    174          ntem1 = MOD( ntem1, iman ) 
    175          IF( ntem1 == 0 )   ntem1 = iman 
    176          ntem2 = MOD( ntem2, iman ) 
    177          IF( ntem2 == 0 )   ntem2 = iman 
    178          IF(lwp) WRITE(numout,*) 'first record file used ntem1 ', ntem1 
    179          IF(lwp) WRITE(numout,*) 'last  record file used ntem2 ', ntem2 
    180           
    181          ! Read monthly temperature data Levitus  
    182           
    183          CALL flinget( numtdt, 'votemper', jpidta, jpjdta, jpk   & 
    184                      , jpmois, ntem1     , ntem1 , mig(1), nlci   & 
    185                      , mjg(1), nlcj      , temdta(1:nlci,1:nlcj,1:jpk,1)     ) 
    186          CALL flinget( numtdt, 'votemper', jpidta, jpjdta, jpk   & 
    187                      , jpmois, ntem2     , ntem2 , mig(1), nlci   & 
    188                      , mjg(1), nlcj      , temdta(1:nlci,1:nlcj,1:jpk,2)     ) 
    189  
    190          IF(lwp) WRITE(numout,*) 
    191          IF(lwp) WRITE(numout,*) ' read Levitus temperature ok' 
    192          IF(lwp) WRITE(numout,*) 
    193           
    194 #  if defined key_tradmp 
    195          IF( cp_cfg == "orca"  .AND. jp_cfg == 2 ) THEN 
    196        
    197             !                                        ! ======================= 
    198             !                                        !  ORCA_R2 configuration 
    199             !                                        ! =======================  
    200  
    201             ij0 = 101   ;   ij1 = 109 
    202             ii0 = 141   ;   ii1 = 155 
    203             DO jj = mj0(ij0), mj1(ij1)                      ! Reduced temperature in the Alboran Sea 
    204                DO ji = mi0(ii0), mi1(ii1) 
    205                   temdta(ji,jj, 13:13 ,:) = temdta(ji,jj, 13:13 ,:) - 0.20 
    206                   temdta(ji,jj, 14:15 ,:) = temdta(ji,jj, 14:15 ,:) - 0.35 
    207                   temdta(ji,jj, 16:25 ,:) = temdta(ji,jj, 16:25 ,:) - 0.40 
     197               !                                        ! ======================= 
     198               !                                        !  ORCA_R2 configuration 
     199               !                                        ! =======================  
     200 
     201               ij0 = 101   ;   ij1 = 109 
     202               ii0 = 141   ;   ii1 = 155 
     203               DO jj = mj0(ij0), mj1(ij1)                      ! Reduced temperature in the Alboran Sea 
     204                  DO ji = mi0(ii0), mi1(ii1) 
     205                     temdta(ji,jj, 13:13 ,:) = temdta(ji,jj, 13:13 ,:) - 0.20 
     206                     temdta(ji,jj, 14:15 ,:) = temdta(ji,jj, 14:15 ,:) - 0.35 
     207                     temdta(ji,jj, 16:25 ,:) = temdta(ji,jj, 16:25 ,:) - 0.40 
     208                  END DO 
    208209               END DO 
    209             END DO 
    210           
    211             IF( n_cla == 0 ) THEN  
    212                !                                         ! Reduced temperature at Red Sea 
    213                ij0 =  87   ;   ij1 =  96 
    214                ii0 = 148   ;   ii1 = 160 
    215                temdta( mi0(ii0):mi1(ii1) , mj0(ij0):mj1(ij1) ,  4:10 , : ) = 7.0  
    216                temdta( mi0(ii0):mi1(ii1) , mj0(ij0):mj1(ij1) , 11:13 , : ) = 6.5  
    217                temdta( mi0(ii0):mi1(ii1) , mj0(ij0):mj1(ij1) , 14:20 , : ) = 6.0 
    218             ELSE 
    219                il0 = 138   ;   il1 = 138 
    220                ij0 = 101   ;   ij1 = 102 
    221                ii0 = 139   ;   ii1 = 139 
    222                DO jl = mi0(il0), mi1(il1)                ! New temperature profile at Gibraltar 
    223                   DO jj = mj0(ij0), mj1(ij1) 
    224                      DO ji = mi0(ii0), mi1(ii1) 
    225                         temdta(ji,jj,:,:) = temdta(jl,jj,:,:) 
     210             
     211               IF( n_cla == 0 ) THEN  
     212                  !                                         ! Reduced temperature at Red Sea 
     213                  ij0 =  87   ;   ij1 =  96 
     214                  ii0 = 148   ;   ii1 = 160 
     215                  temdta( mi0(ii0):mi1(ii1) , mj0(ij0):mj1(ij1) ,  4:10 , : ) = 7.0  
     216                  temdta( mi0(ii0):mi1(ii1) , mj0(ij0):mj1(ij1) , 11:13 , : ) = 6.5  
     217                  temdta( mi0(ii0):mi1(ii1) , mj0(ij0):mj1(ij1) , 14:20 , : ) = 6.0 
     218               ELSE 
     219                  il0 = 138   ;   il1 = 138 
     220                  ij0 = 101   ;   ij1 = 102 
     221                  ii0 = 139   ;   ii1 = 139 
     222                  DO jl = mi0(il0), mi1(il1)                ! New temperature profile at Gibraltar 
     223                     DO jj = mj0(ij0), mj1(ij1) 
     224                        DO ji = mi0(ii0), mi1(ii1) 
     225                           temdta(ji,jj,:,:) = temdta(jl,jj,:,:) 
     226                        END DO 
    226227                     END DO 
    227228                  END DO 
    228                END DO 
    229                il0 = 164   ;   il1 = 164 
    230                ij0 =  88   ;   ij1 =  88 
    231                ii0 = 161   ;   ii1 = 163 
    232                DO jl = mi0(il0), mi1(il1)                ! New temperature profile at Bab el Mandeb 
    233                   DO jj = mj0(ij0), mj1(ij1) 
    234                      DO ji = mi0(ii0), mi1(ii1) 
    235                         temdta(ji,jj,:,:) = temdta(jl,jj,:,:) 
     229                  il0 = 164   ;   il1 = 164 
     230                  ij0 =  88   ;   ij1 =  88 
     231                  ii0 = 161   ;   ii1 = 163 
     232                  DO jl = mi0(il0), mi1(il1)                ! New temperature profile at Bab el Mandeb 
     233                     DO jj = mj0(ij0), mj1(ij1) 
     234                        DO ji = mi0(ii0), mi1(ii1) 
     235                           temdta(ji,jj,:,:) = temdta(jl,jj,:,:) 
     236                        END DO 
     237                     END DO 
     238                     ij0 =  87   ;   ij1 =  87 
     239                     DO jj = mj0(ij0), mj1(ij1) 
     240                        DO ji = mi0(ii0), mi1(ii1) 
     241                           temdta(ji,jj,:,:) = temdta(jl,jj,:,:) 
     242                        END DO 
    236243                     END DO 
    237244                  END DO 
    238                   ij0 =  87   ;   ij1 =  87 
    239                   DO jj = mj0(ij0), mj1(ij1) 
    240                      DO ji = mi0(ii0), mi1(ii1) 
    241                         temdta(ji,jj,:,:) = temdta(jl,jj,:,:) 
     245               ENDIF 
     246 
     247            ENDIF 
     248#endif 
     249 
     250            !                                  ! Mask 
     251            DO jl = 1, 2 
     252               temdta(:,:,:,jl) = temdta(:,:,:,jl) * tmask(:,:,:) 
     253               temdta(:,:,jpk,jl) = 0. 
     254               IF( lk_zps ) THEN                ! z-coord. with partial steps 
     255                  DO jj = 1, jpj                  ! interpolation of temperature at the last level 
     256                     DO ji = 1, jpi 
     257                        ik = mbathy(ji,jj) - 1 
     258                        IF( ik > 2 ) THEN 
     259                           zl = ( gdept(ik) - fsdept(ji,jj,ik) ) / ( gdept(ik) - gdept(ik-1) ) 
     260                           temdta(ji,jj,ik,jl) = (1.-zl) * temdta(ji,jj,ik,jl) + zl * temdta(ji,jj,ik-1,jl)  
     261                        ENDIF 
    242262                     END DO 
    243263                  END DO 
    244                END DO 
     264               ENDIF 
     265            END DO 
     266 
     267            IF(lwp) THEN 
     268               WRITE(numout,*) ' temperature Levitus month ', ntem1, ntem2 
     269               WRITE(numout,*) 
     270               WRITE(numout,*) ' Levitus month = ', ntem1, '  level = 1' 
     271               CALL prihre( temdta(:,:,1,1), jpi, jpj, 1, jpi, 20, 1, jpj, 20, 1., numout ) 
     272               WRITE(numout,*) ' Levitus month = ', ntem1, '  level = ', jpk/2 
     273               CALL prihre( temdta(:,:,jpk/2,1), jpi, jpj, 1, jpi, 20, 1, jpj, 20, 1., numout ) 
     274               WRITE(numout,*) ' Levitus month = ',ntem1,'  level = ', jpkm1 
     275               CALL prihre( temdta(:,:,jpkm1,1), jpi, jpj, 1, jpi, 20, 1, jpj, 20, 1., numout ) 
    245276            ENDIF 
    246  
    247277         ENDIF 
    248 #  endif 
    249  
    250          !                                  ! Mask 
    251          DO jl = 1, 2 
    252             temdta(:,:,:,jl) = temdta(:,:,:,jl) * tmask(:,:,:) 
    253             temdta(:,:,jpk,jl) = 0. 
    254             IF( lk_zps ) THEN                ! z-coord. with partial steps 
    255                DO jj = 1, jpj                  ! interpolation of temperature at the last level 
    256                   DO ji = 1, jpi 
    257                      ik = mbathy(ji,jj) - 1 
    258                      IF( ik > 2 ) THEN 
    259                         zl = ( gdept(ik) - fsdept(ji,jj,ik) ) / ( gdept(ik) - gdept(ik-1) ) 
    260                         temdta(ji,jj,ik,jl) = (1.-zl) * temdta(ji,jj,ik,jl) + zl * temdta(ji,jj,ik-1,jl)  
    261                      ENDIF 
    262                   END DO 
    263                END DO 
    264             ENDIF 
    265          END DO 
    266  
    267          IF(lwp) THEN 
    268             WRITE(numout,*) ' temperature Levitus month ', ntem1, ntem2 
    269             WRITE(numout,*) 
    270             WRITE(numout,*) ' Levitus month = ', ntem1, '  level = 1' 
    271             CALL prihre( temdta(:,:,1,1), jpi, jpj, 1, jpi, 20, 1, jpj, 20, 1., numout ) 
    272             WRITE(numout,*) ' Levitus month = ', ntem1, '  level = ', jpk/2 
    273             CALL prihre( temdta(:,:,jpk/2,1), jpi, jpj, 1, jpi, 20, 1, jpj, 20, 1., numout ) 
    274             WRITE(numout,*) ' Levitus month = ',ntem1,'  level = ', jpkm1 
    275             CALL prihre( temdta(:,:,jpkm1,1), jpi, jpj, 1, jpi, 20, 1, jpj, 20, 1., numout ) 
    276          ENDIF 
     278 
     279  
     280         ! 2. At every time step compute temperature data 
     281         ! ---------------------------------------------- 
     282 
     283         zxy = FLOAT( nday + 15 - 30 * i15 ) / 30. 
     284         t_dta(:,:,:) = (1.-zxy) * temdta(:,:,:,1) + zxy * temdta(:,:,:,2) 
     285 
    277286      ENDIF 
    278  
    279   
    280       ! 2. At every time step compute temperature data 
    281       ! ---------------------------------------------- 
    282  
    283       zxy = FLOAT( nday + 15 - 30 * i15 ) / 30. 
    284       t_dta(:,:,:) = (1.-zxy) * temdta(:,:,:,1) + zxy * temdta(:,:,:,2) 
    285287 
    286288   END SUBROUTINE dta_tem 
  • trunk/NEMO/OPA_SRC/SBC/ocesbc.F90

    r359 r434  
    588588         qsr0 = 0.e0,               &  ! solar heat flux 
    589589         emp0 = 0.e0                   ! net freshwater flux 
    590       REAL(wp) ::   ztrp, zemp_S, zemp_N, zemp_sais, zTstar, zcos_sais, zconv 
     590      REAL(wp) ::   ztrp, zemp_S, zemp_N, zemp_sais, zTstar, zcos_sais1, zconv, zcos_sais2 
    591591      REAL(wp) ::           & 
    592592         zsumemp,           &          ! tampon used for the emp sum 
    593593         zsurf,             &          ! tampon used for the domain sum 
    594594         ztime,             &          ! time in hour 
    595          ztimemax, ztimemin            ! 21th june, and 21th december if date0 = 1st january 
     595         ztimemax1, ztimemin1, &       ! 21th june,   and 21th december if date0 = 1st january 
     596         ztimemax2, ztimemin2          ! 21th august, and 21th february if date0 = 1st january 
    596597      REAL(wp), DIMENSION(jpi,jpj) :: t_star 
    597       INTEGER  ::   ji, jj,  &         ! dummy loop indices 
    598          js                            ! indice for months 
     598      INTEGER  ::   ji, jj             ! dummy loop indices 
     599 
    599600      INTEGER  ::           & 
    600601         zyear0,            &          ! initial year 
    601602         zmonth0,           &          ! initial month 
    602603         zday0,             &          ! initial day 
    603          zday_year0,        &          ! initial day since january 1st 
    604          zdaymax 
     604         zday_year0                    ! initial day since january 1st 
    605605 
    606606      NAMELIST/namflx/ q0, qsr0, emp0 
     
    611611      IF( cp_cfg == 'gyre' ) THEN 
    612612 
    613           zyear0  = ndate0 / 10000 
    614           zmonth0 = ( ndate0 - zyear0 * 10000 ) / 100 
    615           zday0   = ndate0 - zyear0 * 10000 - zmonth0 * 100 
    616           !Calculates nday_year, day since january 1st 
    617           zday_year0 = zday0 
    618           !accumulates days of previous months of this year 
    619  
    620           DO js = 1, zmonth0 
    621             IF(nleapy > 1) THEN 
    622                 zday_year0 = zday_year0 + nleapy 
    623             ELSE 
    624                 IF( MOD(zyear0, 4 ) == 0 ) THEN 
    625                     zday_year0 = zday_year0 + nbiss(js) 
    626                 ELSE 
    627                     zday_year0 = zday_year0 + nobis(js) 
    628                 ENDIF 
    629             ENDIF 
    630           END DO 
    631           ! day (in hours) since january the 1st 
    632           ztime = FLOAT( kt ) * rdt / (rmmss * rhhmm)  &  ! incrementation in hour 
    633              &     - (nyear - 1) * rjjhh * raajj       &  !  - nber of hours the precedent years 
    634              &     + zday_year0 / 24                      ! nber of hours initial date 
    635           ! day 21th counted since the 1st January 
    636           zdaymax = 21                                    ! 21th day of the month 
    637           DO js = 1, 5                                    ! count each day  until end May 
    638             IF(nleapy > 1) THEN 
    639                 zdaymax = zdaymax + nleapy 
    640             ELSE 
    641                 IF( MOD(zyear0, 4 ) == 0 ) THEN 
    642                     zdaymax = zdaymax + nbiss(js) 
    643                 ELSE 
    644                     zdaymax = zdaymax + nobis(js) 
    645                 ENDIF 
    646             ENDIF 
    647           END DO 
    648           ! 21th june in hours 
    649           ztimemax = zdaymax * 24 
    650           ! 21th december day in hours 
     613          zyear0  = ndate0 / 10000                              ! initial year 
     614          zmonth0 = ( ndate0 - zyear0 * 10000 ) / 100           ! initial month 
     615          zday0   = ndate0 - zyear0 * 10000 - zmonth0 * 100     ! initial day betwen 1 and 30 
     616          zday_year0= (zmonth0-1)*30.+zday0                     ! initial day betwen 1 and 360 
     617 
     618          ! current day (in hours) since january the 1st of the current year 
     619          ztime = FLOAT( kt ) * rdt / (rmmss * rhhmm)  &    !  total incrementation (in hours) 
     620             &     - (nyear  - 1) * rjjhh * raajj           !  minus years since beginning of experiment (in hours) 
     621 
     622          ! 21th june at 24h  in hours 
     623          ztimemax1 = ((5.*30.)+21.)* 24. 
     624          ! 21th december in hours 
    651625          ! rjjhh * raajj / 4 = 1 seasonal cycle in hours 
    652           ztimemin = ztimemax + rjjhh * raajj / 2          
     626          ztimemin1 = ztimemax1 + rjjhh * raajj / 2          
     627          ! 21th july at 24h in hours 
     628          ztimemax2 = ((6.*30.)+21.)* 24. 
     629          ! 21th january day in hours 
     630          ! rjjhh * raajj / 4 = 1 seasonal cycle in hours 
     631          ztimemin2 = ztimemax2 - rjjhh * raajj / 2          
     632 
    653633          ! amplitudes 
    654634          zemp_S   = 0.7       ! intensity of COS in the South 
     
    656636          zemp_sais= 0.1 
    657637          zTstar   = 28.3      ! intemsity from 28.3 a -5 deg 
     638 
    658639          ! 1/2 period between 21th June and 21th December 
    659           zcos_sais = COS( (ztime - ztimemax) / (ztimemin - ztimemax) * rpi )     
     640          zcos_sais1 = COS( (ztime - ztimemax1) / (ztimemin1 - ztimemax1) * rpi )     
     641 
     642          ! 1/2 period between 21th July and 21th January 
     643          zcos_sais2 = COS( (ztime - ztimemax2) / (ztimemax2 - ztimemin2) * rpi ) 
     644 
    660645          ztrp= - 40.          ! retroaction term (W/m2/K) 
    661646          zconv = 3.16e-5      ! convert 1m/yr->3.16e-5mm/s 
     
    665650                ! and 13 degC at 50N 53.5 + or - 11 = 1/4 period : 
    666651                ! 64.5 in summer, 42.5 in winter 
    667                 t_star (ji,jj) = zTstar * ( 1 + 1. / 50. * zcos_sais )   &                   
     652                t_star (ji,jj) = zTstar * ( 1 + 1. / 50. * zcos_sais2 )   &                   
    668653                   &             * COS( rpi * (gphit(ji,jj) - 5.)        &                   
    669                    &                        / (53.5 * ( 1 + 11 / 53.5 * zcos_sais ) * 2.) )  
     654                   &                        / (53.5 * ( 1 + 11 / 53.5 * zcos_sais2 ) * 2.) )  
    670655                qt  (ji,jj) = ztrp * ( tb(ji,jj,1) - t_star(ji,jj) ) 
    671656                IF( gphit(ji,jj) >= 14.845 .AND. 37.2 >= gphit(ji,jj)) THEN 
     
    673658                   emp  (ji,jj) =   zemp_S * zconv   & 
    674659                      &         * SIN( rpi / 2 * (gphit(ji,jj) - 37.2) / (24.6 - 37.2) )  &  
    675                       &         * ( 1 - zemp_sais / zemp_S * zcos_sais) 
     660                      &         * ( 1 - zemp_sais / zemp_S * zcos_sais1) 
    676661                   emps (ji,jj) = emp  (ji,jj) 
    677662                ELSE 
     
    679664                   emp (ji,jj) =  - zemp_N * zconv   & 
    680665                      &         * SIN( rpi / 2 * (gphit(ji,jj) - 37.2) / (46.8 - 37.2) )  &  
    681                       &         * ( 1 - zemp_sais / zemp_N * zcos_sais ) 
    682                     emps (ji,jj) = emp  (ji,jj) 
     666                      &         * ( 1 - zemp_sais / zemp_N * zcos_sais1 ) 
     667                   emps (ji,jj) = emp  (ji,jj) 
    683668                ENDIF 
    684669                ! 23.5 deg : tropics 
    685                 qsr (ji,jj) =  230 * COS( 3.1415 * ( gphit(ji,jj) - 23.5 * zcos_sais ) / ( 0.9 * 180 ) )    
     670                qsr (ji,jj) =  230 * COS( 3.1415 * ( gphit(ji,jj) - 23.5 * zcos_sais1 ) / ( 0.9 * 180 ) )    
    686671             END DO 
    687672          END DO 
     673           
    688674          ! compute the emp flux such as its integration on the whole domain and at each time be zero 
    689           zsumemp = 0. 
    690           zsurf = 0. 
     675          zsumemp = 0.e0 
     676          zsurf = 0.e0 
    691677          DO jj = 1, jpj 
    692             DO ji = 1, jpi 
    693               zsumemp = zsumemp + emp(ji, jj) * tmask(ji, jj,  1) 
    694               zsurf =  zsurf +  tmask(ji, jj,  1) 
    695             END DO 
     678             DO ji = 1, jpi 
     679                zsumemp = zsumemp + emp(ji,jj) * tmask(ji,jj,1) * tmask_i(ji,jj) 
     680                zsurf =  zsurf + tmask(ji,jj,1) * tmask_i(ji,jj) 
     681             END DO 
    696682          END DO 
    697683 
     
    706692             zsumemp = zsumemp / zsurf 
    707693          ENDIF 
     694 
     695          !salinity terms 
    708696          DO jj = 1, jpj 
    709             DO ji = 1, jpi 
    710               emp(ji, jj) =  emp(ji, jj) - zsumemp * tmask(ji, jj,  1) 
    711               emps(ji, jj)=  emp(ji, jj) 
    712             END DO 
     697             DO ji = 1, jpi 
     698                erp(ji,jj) = 0.e0  
     699                emp(ji, jj) =  emp(ji,jj) - zsumemp * tmask(ji,jj,1) 
     700                emps(ji, jj)=  emp(ji,jj) 
     701             END DO 
    713702          END DO 
     703 
     704         IF( kt == nit000 .AND. lwp ) THEN 
     705            WRITE(numout,*)' ocesbc  : analytical formulation for gyre' 
     706            WRITE(numout,*)' ~~~~~~~ ' 
     707            WRITE(numout,*)'           nyear      = ', nyear 
     708            WRITE(numout,*)'           ztime      = ',ztime 
     709            WRITE(numout,*)'           ztimemax1  = ',ztimemax1 
     710            WRITE(numout,*)'           ztimemin1  = ',ztimemin1 
     711            WRITE(numout,*)'           ztimemax2  = ',ztimemax2 
     712            WRITE(numout,*)'           ztimemin2  = ',ztimemin2 
     713            WRITE(numout,*)'           zyear0     = ', zyear0 
     714            WRITE(numout,*)'           zmonth0    = ', zmonth0 
     715            WRITE(numout,*)'           zday0      = ', zday0 
     716            WRITE(numout,*)'           zday_year0 = ',zday_year0 
     717            WRITE(numout,*)'           raajj      = ', raajj 
     718            WRITE(numout,*)'           zemp_S     = ',zemp_S  
     719            WRITE(numout,*)'           zemp_N     = ',zemp_N  
     720            WRITE(numout,*)'           zemp_sais  = ',zemp_sais 
     721            WRITE(numout,*)'           zTstar     = ',zTstar  
     722            WRITE(numout,*)'           zsumemp    = ',zsumemp 
     723            WRITE(numout,*)'           zsurf      = ',zsurf  
     724            WRITE(numout,*)'           ztrp       = ',ztrp 
     725            WRITE(numout,*)'           zconv      = ',zconv  
     726         ENDIF 
    714727 
    715728      ELSE 
  • trunk/NEMO/OPA_SRC/SBC/taumod.F90

    r247 r434  
    105105         ztimemax, ztimemin,         &  ! 21th June, and 21th decem. if date0 = 1st january 
    106106         ztaun                          ! intensity  
    107       INTEGER  ::   ji, jj, &           ! dummy loop indices 
    108          js                             ! indice for months 
     107      INTEGER  ::   ji, jj              ! dummy loop indices 
     108 
    109109      INTEGER  ::           & 
    110110         zyear0,            &           ! initial year 
    111111         zmonth0,           &           ! initial month 
    112112         zday0,             &           ! initial day 
    113          zday_year0,        &           ! initial day since january 1st 
    114          zdaymax 
     113         zday_year0                    ! initial day since january 1st 
     114         
    115115 
    116116      !! * Local declarations 
     
    122122      IF( cp_cfg == 'gyre' ) THEN 
    123123 
    124          ! same wind as in Wico 
    125          !test date0 : ndate0 = 010203 
    126          zyear0  = ndate0 / 10000 
    127          zmonth0 = ( ndate0 - zyear0 * 10000 ) / 100 
    128          zday0   = ndate0 - zyear0 * 10000 - zmonth0 * 100 
    129          !Calculates nday_year, day since january 1st 
    130          zday_year0 = zday0 
    131          !accumulates days of previous months of this year 
    132  
    133          DO js = 1, zmonth0 
    134             IF(nleapy > 1) THEN 
    135                zday_year0 = zday_year0 + nleapy 
    136             ELSE 
    137                IF( MOD(zyear0, 4 ) == 0 ) THEN 
    138                   zday_year0 = zday_year0 + nbiss(js) 
    139                ELSE 
    140                   zday_year0 = zday_year0 + nobis(js) 
    141                ENDIF 
    142             ENDIF 
    143          END DO 
    144     
    145          ! day (in hours) since january the 1st 
    146          ztime = FLOAT( kt ) * rdt / (rmmss * rhhmm)  &  ! incrementation in hour 
    147             &     - (nyear - 1) * rjjhh * raajj       &  !  - nber of hours the precedent years 
    148             &     + zday_year0 / 24                      ! nber of hours initial date 
    149          ! day 21th counted since the 1st January 
    150          zdaymax = 21                                    ! 21th day of the month 
    151          DO js = 1, 5                                    ! count each day  until end May 
    152            IF(nleapy > 1) THEN 
    153                zdaymax = zdaymax + nleapy 
    154            ELSE 
    155                IF( MOD(zyear0, 4 ) == 0 ) THEN 
    156                    zdaymax = zdaymax + nbiss(js) 
    157                ELSE 
    158                    zdaymax = zdaymax + nobis(js) 
    159                ENDIF 
    160            ENDIF 
    161          END DO 
    162         ! 21th june in hours 
    163          ztimemax = zdaymax * 24 
     124         zyear0  = ndate0 / 10000                             ! initial year 
     125         zmonth0 = ( ndate0 - zyear0 * 10000 ) / 100          ! initial month 
     126         zday0   = ndate0 - zyear0 * 10000 - zmonth0 * 100    ! initial day betwen 1 and 30 
     127 
     128         zday_year0 = (zmonth0-1)*30.+zday0                   ! initial day betwen 1 and 360 
     129 
     130         ! current day (in hours) since january the 1st of the current year 
     131          ztime = FLOAT( kt ) * rdt / (rmmss * rhhmm)  &    !  total incrementation (in hours) 
     132             &     - (nyear  - 1) * rjjhh * raajj           !  minus years since beginning of experiment (in hours) 
     133 
     134 
     135        ! 21th june at 24h in hours 
     136         ztimemax = ((5.*30.)+21.)* 24. 
    164137         ! 21th december day in hours 
    165138         ! rjjhh * raajj / 4 = 1 seasonal cycle in hours 
    166139         ztimemin = ztimemax + rjjhh * raajj / 2   
    167140 
    168          ! mean intensity at 0.105 ; srqt(2) because projected with 45deg angle 
     141         ! mean intensity at 0.105/srqt(2) because projected with 45deg angle 
    169142         ztau = 0.105 / SQRT(2.)             
    170143         ! seasonal oscillation intensity 
     
    180153         END DO 
    181154    
    182          IF( kt == nit000 ) THEN 
    183             IF(lwp) WRITE(numout,*)' tau     : Constant surface wind stress read in namelist' 
    184             IF(lwp) WRITE(numout,*)' ~~~~~~~ ' 
    185             IF(lwp) WRITE(numout,*)'nyear      = ', nyear 
    186             IF(lwp) WRITE(numout,*)'nmonth     = ', nmonth 
    187             IF(lwp) WRITE(numout,*)'nday       = ', nday 
    188             IF(lwp) WRITE(numout,*)'nday_year  = ',nday_year 
    189             IF(lwp) WRITE(numout,*)'ndastp     = ',ndastp 
    190             IF(lwp) WRITE(numout,*)'adatrj     = ',adatrj 
    191             IF(lwp) WRITE(numout,*)'ztime      = ',ztime 
    192             IF(lwp) WRITE(numout,*)'zdaymax    = ',zdaymax 
    193     
    194             IF(lwp) WRITE(numout,*)'ztimemax   = ',ztimemax 
    195             IF(lwp) WRITE(numout,*)'ztimemin   = ',ztimemin 
    196             IF(lwp) WRITE(numout,*)'zyear0     = ', zyear0 
    197             IF(lwp) WRITE(numout,*)'zmonth0    = ', zmonth0 
    198             IF(lwp) WRITE(numout,*)'zday0      = ', zday0 
    199             IF(lwp) WRITE(numout,*)'zday_year0 = ',zday_year0 
    200             IF(lwp) WRITE(numout,*)'nobis(2)', nobis(2) 
    201             IF(lwp) WRITE(numout,*)'nobis(5)', nobis(5) 
    202             IF(lwp) WRITE(numout,*)'nobis(6)', nobis(6) 
    203             IF(lwp) WRITE(numout,*)'nobis(1)', nobis(1) 
    204             IF(lwp) WRITE(numout,*)'nobis(zmonth0 -1)', nobis(zmonth0 - 1) 
    205             IF(lwp) WRITE(numout,*)'raajj  = ', raajj 
     155         IF( kt == nit000 .AND. lwp ) THEN 
     156            WRITE(numout,*)' tau    : analytical formulation for gyre' 
     157            WRITE(numout,*)' ~~~~~~~ ' 
     158            WRITE(numout,*)'          nyear      = ', nyear 
     159            WRITE(numout,*)'          nmonth     = ', nmonth 
     160            WRITE(numout,*)'          nday       = ', nday 
     161            WRITE(numout,*)'          nday_year  = ',nday_year 
     162            WRITE(numout,*)'          ndastp     = ',ndastp 
     163            WRITE(numout,*)'          adatrj     = ',adatrj 
     164            WRITE(numout,*)'          ztime      = ',ztime 
     165            WRITE(numout,*)'          ztimemax   = ',ztimemax 
     166            WRITE(numout,*)'          ztimemin   = ',ztimemin 
     167            WRITE(numout,*)'          zyear0     = ', zyear0 
     168            WRITE(numout,*)'          zmonth0    = ', zmonth0 
     169            WRITE(numout,*)'          zday0      = ', zday0 
     170            WRITE(numout,*)'          zday_year0 = ',zday_year0 
     171            WRITE(numout,*)'          raajj      = ', raajj 
     172            WRITE(numout,*)'          ztau       = ', ztau 
     173            WRITE(numout,*)'          ztau_sais  = ', ztau_sais 
     174            WRITE(numout,*)'          ztaun      = ', ztaun 
    206175         ENDIF 
    207176    
  • trunk/NEMO/OPA_SRC/TRA/tradmp.F90

    r418 r434  
    2424   USE dtatem          ! temperature data 
    2525   USE dtasal          ! salinity data 
     26   USE dtasss          ! surface salinity data 
    2627   USE zdfmxl          ! mixed layer depth 
    2728   USE lib_mpp         ! distribued memory computing 
     
    4748   !! * Module variables 
    4849   INTEGER  ::             & !!! * newtonian damping namelist (mandmp) * 
    49       ndmp   =   -1 ,      &  ! = 0/-1/'latitude' for damping over T and S 
     50      ndmp   =   -1 ,      &  ! = 0/-1/-2/'latitude' for damping over T and S 
    5051      ndmpf  =    2 ,      &  ! = 1 create a damping.coeff NetCDF file  
    51       nmldmp =    0           ! = 0/1/2 flag for damping in the mixed layer 
     52      nmldmp =    0           ! = 0/1/2/3 flag for damping in the mixed layer 
    5253   REAL(wp) ::             & !!!  * newtonian damping namelist * 
    5354      sdmp   =   50.,      &  ! surface time scale for internal damping (days) 
     
    177178         END DO 
    178179 
     180      CASE( 3 )                ! newtonian damping of SSS only 
     181         DO jj = 2, jpjm1 
     182            DO ji = fs_2, fs_jpim1   ! vector opt. 
     183               zsa = resto(ji,jj,1) * ( sss(ji,jj) - sb(ji,jj,1) ) 
     184               ! add the trends to the general tracer trends 
     185               sa(ji,jj,1) = sa(ji,jj,1) + zsa 
     186               ! save the salinity trend (used in flx to close the salt budget) 
     187               strdmp(ji,jj,1) = zsa 
     188            END DO 
     189         END DO 
     190 
    179191      END SELECT 
    180192 
     
    237249      SELECT CASE ( ndmp ) 
    238250 
     251      CASE ( -2 )               ! GYRE: damping SSS only 
     252         IF(lwp) WRITE(numout,*) '          SSS damping in Gyre' 
     253 
    239254      CASE ( -1 )               ! ORCA: damping in Red & Med Seas only 
    240255         IF(lwp) WRITE(numout,*) '          tracer damping in the Med & Red seas only' 
     
    261276      CASE ( 2 )                ! no damping in the mixed layer  
    262277         IF(lwp) WRITE(numout,*) '          no tracer damping in the mixed layer' 
     278 
     279      CASE ( 3 )                ! SSS damping only  
     280         IF(lwp) WRITE(numout,*) '          SSS surface damping' 
    263281 
    264282      CASE DEFAULT 
     
    275293         nstop = nstop + 1 
    276294      ENDIF 
     295 
     296      IF( lk_dtasss .AND. ( ( ndmp /= -2 ) .OR. (nmldmp /= 3) ) ) THEN 
     297         IF(lwp) WRITE(numout,cform_err) 
     298         IF(lwp) WRITE(numout,*) '          Check namelist for SSS restoring in Gyre ' 
     299         IF(lwp) WRITE(numout,*) '          ndmp must be -2 and nmldmp must be 3' 
     300         nstop = nstop + 1 
     301      ENDIF 
     302 
     303 
    277304 
    278305      strdmp(:,:,:) = 0.e0       ! internal damping salinity trend (used in ocesbc) 
     
    656683         resto(:,:,jpk) = 0.e0 
    657684 
     685      ELSEIF( cp_cfg == "gyre" .AND. ( ndmp == -2 )) THEN 
     686 
     687         !                                         ! ========================= 
     688         !                                         !  SSS damping 
     689         !                                         ! ========================= 
     690         zsdmp = 1./(sdmp * rday) 
     691         IF(lwp)WRITE(numout,*) 
     692         IF(lwp)WRITE(numout,*) '              GYRE configuration: Damping coefficient' 
     693         resto(:,:, : ) = 0. 
     694         resto(:,:, 1 ) = zsdmp * tmask(:,:,1) 
     695 
    658696      ELSE 
    659697         !    ------------ 
  • trunk/NEMO/OPA_SRC/in_out_manager.F90

    r420 r434  
    8787      numwvo     = 72 ,      &  !: logical unit for 3d output write 
    8888      numsst     = 65 ,      &  !: logical unit for surface temperature data 
     89      numsss     = 66 ,      &  !: logical unit for surface salinity data 
    8990      numbol     = 67 ,      &  !: logical unit for "bol" diagnostics 
    9091      numptr     = 68 ,      &  !: logical unit for Poleward TRansports 
  • 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 
  • trunk/NEMO/OPA_SRC/mppini.F90

    r389 r434  
    143143         iimppt, ijmppt, ilcit, ilcjt       ! temporary workspace 
    144144      REAL(wp) ::   zidom, zjdom            ! temporary scalars 
    145       CHARACTER(len=80) :: clname 
    146145      !!---------------------------------------------------------------------- 
    147146 
     
    351350       IF (lwp) THEN 
    352351        inum = 11     
    353         clname = 'layout.dat' 
    354         CALL ctlopn(inum, clname, 'UNKNOWN', 'FORMATTED', 'SEQUENTIAL', 1, numout, lwp, 0) 
    355          
     352 
     353        OPEN(inum,FILE='layout.dat') 
     354        WRITE(inum,'(a)') '   jpnij     jpi     jpj     jpk  jpiglo  jpjglo' 
    356355        WRITE(inum,'(6i8)') jpnij,jpi,jpj,jpk,jpiglo,jpjglo 
    357356        WRITE(inum,'(a)') 'NAREA nlci nlcj nldi nldj nlei nlej nimpp njmpp' 
  • trunk/NEMO/OPA_SRC/par_GYRE.h90

    r392 r434  
    2424      jpidta  = 30*jp_cfg+2, &  !: 1st horizontal dimension ( >= jpi ) 
    2525      jpjdta  = 20*jp_cfg+2, &  !: 2nd    "            "    ( >= jpj ) 
    26       jpkdta  = 101,         &  !: number of levels         ( >= jpk ) 
     26      jpkdta  = 31,          &  !: number of levels         ( >= jpk ) 
    2727 
    2828      ! global domain size     !!! * full domain * 
     
    7676 
    7777   REAL(wp), PARAMETER  ::       &  !: 
    78       &     ppsur = 0.e0      ,  &  !: Computed in domzgr 
    79       &     ppa0  = 0.e0      ,  &  !: 
    80       &     ppa1  = 0.e0      ,  &  !: 
     78      &     ppsur = -2033.194295283385_wp   ,  &  !:  
     79      &     ppa0  =  155.8325369664153_wp   ,  &  !: 
     80      &     ppa1  =  146.3615918601890_wp   ,  &  !: 
    8181      ! 
    8282      &     ppkth =  17.28520372419791_wp   ,  &  !: (non dimensional): gives the approximate 
     
    9292   !! 
    9393   REAL(wp), PARAMETER ::        &  !: 
    94       &     ppdzmin = 1.0e0   ,  &  !: (meters): depth of the top (first) model layer 
     94      &     ppdzmin = pp_not_used   ,  &  !: (meters): depth of the top (first) model layer 
    9595      !                             !            depth of second "w" level 
    96       &     pphmax  = 5000.         !: (meters): maximum depth of the ocean 
     96      &     pphmax  = pp_not_used         !: (meters): maximum depth of the ocean 
    9797      !                             !            depth of the last "w" level 
    9898 
  • trunk/NEMO/OPA_SRC/step.F90

    r414 r434  
    2323   USE dtasal          ! ocean salinity    data           (dta_sal routine) 
    2424   USE dtasst          ! ocean sea surface temperature    (dta_sst routine) 
     25   USE dtasss          ! ocean sea surface salinity       (dta_sss routine) 
    2526   USE taumod          ! surface stress                   (tau     routine) 
    2627   USE flxmod          ! thermohaline fluxes              (flx     routine) 
     
    205206      IF( lk_dtasst  )   CALL dta_sst( kstp )         ! Sea Surface Temperature data 
    206207 
     208      IF( lk_dtasss  )   CALL dta_sss( kstp )         ! Sea Surface salinity data 
     209 
    207210      IF( lk_obc     )   CALL obc_dta( kstp )         ! update dynamic and tracer data at open boundaries 
    208211 
Note: See TracChangeset for help on using the changeset viewer.