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 440 for trunk/NEMO – NEMO

Changeset 440 for trunk/NEMO


Ignore:
Timestamp:
2006-04-19T16:43:17+02:00 (18 years ago)
Author:
opalod
Message:

nemo_v1_update_046 : CT : - light modifications related to the way to make SST/SSS damping

  • add a flx_init subroutine to read the namflx namelist to get feedback coefficients for SST(dqdt0)/SSS(deds0) damping
  • replace the ztrp variable by the dqdt0 read in the namflx namelist
Location:
trunk/NEMO
Files:
7 edited

Legend:

Unmodified
Added
Removed
  • trunk/NEMO/C1D_SRC/icestp1d.F90

    r359 r440  
    318318      !! * Local declarations 
    319319      INTEGER ::   ji, jj                   ! dummy loop indices 
    320       REAL(wp) ::   zerp, ztrp, zsrp 
     320      REAL(wp) ::   zerp, zsrp 
    321321#if ! defined key_dynspg_rl 
    322322      REAL(wp) ::   zwei 
     
    341341      ! -------------- 
    342342      ! Restoring coefficients on SST and SSS    
    343       ztrp  = -40.                   ! (W/m2/K)     
    344       zsrp  = ztrp * ro0cpr * rauw   ! (Kg/m2/s2)  
     343      zsrp = dqdt0 * ro0cpr * rauw   ! (Kg/m2/s)  
    345344 
    346345#if ! defined key_dynspg_rl  
  • trunk/NEMO/OPA_SRC/DTA/dtasal.F90

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

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

    r247 r440  
    1919   !! * Routine accessibility 
    2020   PUBLIC flx       ! routine called by step.F90 
     21   PUBLIC flx_init  ! routine called by opa.F90 
     22 
     23   !! * local declarations 
     24   REAL(wp), PUBLIC ::            & !!! surface fluxes namelist (namflx) 
     25      q0    = 0.e0,               &  ! net heat flux 
     26      qsr0  = 0.e0,               &  ! solar heat flux 
     27      emp0  = 0.e0,               &  ! net freshwater flux 
     28      dqdt0 = -40.,               &  ! coefficient for SST damping (W/m2/K) 
     29      deds0 = 27.7                   ! coefficient for SSS damping (mm/day) 
    2130    
    2231   !! * Substitutions 
     
    91100      !!   8.5  !  02-09  (G. Madec)  F90: Free form and module 
    92101      !!---------------------------------------------------------------------- 
    93       !! * Modules used 
    94       USE flxrnf                       ! ocean runoffs 
    95  
    96102      !! * arguments 
    97103      INTEGER, INTENT( in  ) ::   kt   ! ocean time step 
    98  
    99       !! * local declarations 
    100       REAL(wp) ::                   & !!! surface fluxes namelist (namflx) 
    101          q0   = 0.e0,               &  ! net heat flux 
    102          qsr0 = 0.e0,               &  ! solar heat flux 
    103          emp0 = 0.e0                   ! net freshwater flux 
    104  
    105       NAMELIST/namflx/ q0, qsr0, emp0 
    106104      !!--------------------------------------------------------------------- 
    107105 
    108       IF( kt == nit000 ) THEN 
    109  
    110          ! Read Namelist namflx : surface thermohaline fluxes 
    111          ! -------------------- 
    112          REWIND ( numnam ) 
    113          READ   ( numnam, namflx ) 
    114  
     106      IF( kt == nit000 )  THEN 
    115107         IF(lwp) WRITE(numout,*)' ' 
    116          IF(lwp) WRITE(numout,*)' flx     : Constant surface fluxes read in namelist' 
    117          IF(lwp) WRITE(numout,*)' ~~~~~~~ ' 
    118          IF(lwp) WRITE(numout,*)'      : See the routine ocesbc'      
    119  
    120      ENDIF 
     108         IF(lwp) WRITE(numout,*)'flx     : Analytical/Constant surface fluxes' 
     109         IF(lwp) WRITE(numout,*)'~~~~~~~ ' 
     110         IF(lwp) WRITE(numout,*)'          See the routine oce_sbc'      
     111         IF(lwp) WRITE(numout,*)' ' 
     112      ENDIF 
    121113 
    122114   END SUBROUTINE flx 
    123115 
    124116#endif 
    125    !!====================================================================== 
     117 
     118 
     119   SUBROUTINE flx_init 
     120      !!--------------------------------------------------------------------- 
     121      !!                    ***  ROUTINE flx  *** 
     122      !!               
     123      !! ** Purpose :   provide the thermohaline fluxes (heat and freshwater) 
     124      !!      to the ocean at each time step. 
     125      !! 
     126      !! ** Method  :   Constant surface fluxes (read in namelist (namflx)) 
     127      !! 
     128      !! ** Action  : - q, qt, qsr, emp, emps, qrp, erp 
     129      !! 
     130      !! History : 
     131      !!        !  91-03  ()  Original code 
     132      !!   8.5  !  02-09  (G. Madec)  F90: Free form and module 
     133      !!---------------------------------------------------------------------- 
     134      NAMELIST/namflx/ q0, qsr0, emp0, dqdt0, deds0 
     135      !!--------------------------------------------------------------------- 
     136 
     137      ! Read Namelist namflx : surface thermohaline fluxes 
     138      ! -------------------- 
     139      REWIND ( numnam ) 
     140      READ   ( numnam, namflx ) 
     141 
     142      IF(lwp) THEN 
     143         WRITE(numout,*)' ' 
     144         WRITE(numout,*)'flx_init : thermohaline forcing ' 
     145         WRITE(numout,*)'~~~~~~~~ ' 
     146         WRITE(numout,*)'           net heat flux                  q0   = ', q0  , ' W/m2' 
     147         WRITE(numout,*)'           solar heat flux                qsr0 = ', qsr0, ' W/m2' 
     148         WRITE(numout,*)'           net heat flux                  emp0 = ', emp0, ' W/m2' 
     149         WRITE(numout,*)'           coefficient for SST damping   dqdt0 = ', dqdt0,' W/m2/K' 
     150         WRITE(numout,*)'           coefficient for SSS damping   deds0 = ', deds0,' mm/day' 
     151      ENDIF 
     152 
     153   END SUBROUTINE flx_init 
     154 
    126155END MODULE flxmod 
  • trunk/NEMO/OPA_SRC/SBC/ocesbc.F90

    r434 r440  
    8787      !! * Local declarations 
    8888      INTEGER ::   ji, jj                   ! dummy loop indices 
    89       REAL(wp) ::   ztx, ztaux, zty, ztauy, ztrp 
     89      REAL(wp) ::   ztx, ztaux, zty, ztauy 
    9090      REAL(wp) ::   ztdta, ztgel, zqrp 
    9191      !!---------------------------------------------------------------------- 
     
    113113         ! Surface heat flux (W/m2) 
    114114         ! ----------------------- 
    115          ztrp = 0.e0 
    116115 
    117116         ! restoring heat flux 
     
    124123               ztdta = MAX( t_dta(ji,jj,1), ztgel ) 
    125124#endif 
    126                zqrp = ztrp * ( tb(ji,jj,1) - ztdta ) 
     125               zqrp = dqdt0 * ( tb(ji,jj,1) - ztdta ) 
    127126 
    128127               qrp(ji,jj) = (1.0-freeze(ji,jj) ) * zqrp 
     
    306305      !! * Local declarations 
    307306      INTEGER  ::   ji, jj, jf         ! dummy loop indices 
    308       REAL(wp) ::   ztrp, ztgel,    &  ! temporary scalars 
     307      REAL(wp) ::   ztgel,          &  ! temporary scalars 
    309308         zice, zhemis, zqrp, zqri,  &  !    "         " 
    310309         zq, zqi, zerp, ze, zei, zro   !    "         " 
     
    313312      ! Compute fluxes 
    314313      ! -------------- 
    315  
    316       ! constant initialization 
    317       ztrp = -40.   ! restoring term for temperature (w/m2/k) 
    318314 
    319315      DO jj = 1, jpj 
     
    343339 
    344340            zqrp = 0. 
    345             zqri = ztrp*MIN( 0., tb(ji,jj,1)-ztgel ) 
     341            zqri = dqdt0*MIN( 0., tb(ji,jj,1)-ztgel ) 
    346342            qrp(ji,jj) = ( ( 1. - zice ) * zqrp + zice * zqri ) * tmask(ji,jj,1) 
    347343 
     
    417413      REAL(wp) ::  zxy 
    418414      REAL(wp) ::  zsice, zqri, zqrp, ztdta, zqrj 
    419       REAL(wp) ::  zq, zqi, zhemis, ztrp 
     415      REAL(wp) ::  zq, zqi, zhemis 
    420416      REAL(wp), DIMENSION(jpi,jpj) :: zeri, zerps, ziclim 
    421417      REAL(wp), DIMENSION(jpi,jpj) :: zqt, zqsr, zemp   
     
    456452         CALL oce_sbc_dmp 
    457453 
    458          ztrp = -40.             ! restoring terme for temperature (w/m2/k)    
    459454         zsice = - 0.04 / 0.8    ! ratio of isohaline compressibility over isotherme compressibility  
    460455                                 ! ( d rho / dt ) / ( d rho / ds )      ( s = 34, t = -1.8 ) 
     
    486481               ! - gamma*min(0,t-tgel) if climatological and opa ice (ziclim=1 zicopa=1) 
    487482 
    488                zqri = ztrp * ( tb(ji,jj,1) - ( fzptn(ji,jj) - 1.) ) 
    489                zqrj = ztrp * MIN( 0., tb(ji,jj,1) - fzptn(ji,jj) ) 
     483               zqri = dqdt0 * ( tb(ji,jj,1) - ( fzptn(ji,jj) - 1.) ) 
     484               zqrj = dqdt0 * MIN( 0., tb(ji,jj,1) - fzptn(ji,jj) ) 
    490485 
    491486               qrp(ji,jj) =  ( ziclim(ji,jj) * ( (1 - freeze(ji,jj)) * zqri    & 
     
    493488 
    494489#if ! defined key_flx_bulk_monthly || ! defined key_flx_bulk_daily 
    495                zqrp = ztrp * ( tb(ji,jj,1) - ztdta ) 
     490               zqrp = dqdt0 * ( tb(ji,jj,1) - ztdta ) 
    496491               qrp(ji,jj) = qrp(ji,jj) + (1. - ziclim(ji,jj)) * zqrp 
    497492# endif 
     
    579574      USE flxrnf                       ! ocean runoffs 
    580575      USE daymod, ONLY : nyear         ! calendar 
     576      USE dtasss                       ! sea surface salinity data 
    581577 
    582578      !! * arguments 
     
    588584         qsr0 = 0.e0,               &  ! solar heat flux 
    589585         emp0 = 0.e0                   ! net freshwater flux 
    590       REAL(wp) ::   ztrp, zemp_S, zemp_N, zemp_sais, zTstar, zcos_sais1, zconv, zcos_sais2 
     586      REAL(wp) ::   zsrp,           & 
     587         zemp_S, zemp_N, zemp_sais, & 
     588         zTstar, zcos_sais1, zconv, & 
     589         zcos_sais2 
    591590      REAL(wp) ::           & 
    592591         zsumemp,           &          ! tampon used for the emp sum 
     
    643642          zcos_sais2 = COS( (ztime - ztimemax2) / (ztimemax2 - ztimemin2) * rpi ) 
    644643 
    645           ztrp= - 40.          ! retroaction term (W/m2/K) 
    646644          zconv = 3.16e-5      ! convert 1m/yr->3.16e-5mm/s 
    647645          DO jj = 1, jpj 
     
    653651                   &             * COS( rpi * (gphit(ji,jj) - 5.)        &                   
    654652                   &                        / (53.5 * ( 1 + 11 / 53.5 * zcos_sais2 ) * 2.) )  
    655                 qt  (ji,jj) = ztrp * ( tb(ji,jj,1) - t_star(ji,jj) ) 
     653                qt  (ji,jj) = dqdt0 * ( tb(ji,jj,1) - t_star(ji,jj) ) 
    656654                IF( gphit(ji,jj) >= 14.845 .AND. 37.2 >= gphit(ji,jj)) THEN 
    657655                   ! zero at 37.8 deg, max at 24.6 deg 
     
    693691          ENDIF 
    694692 
    695           !salinity terms 
     693          IF( lk_dtasss ) THEN           ! Sea surface salinity damping 
     694             ! deds0 from (mm/day) => (mm/s) 
     695             zsrp = deds0 / rday  
     696             erp(:,:) = zsrp * ( sss(:,:) - sb(:,:,1) ) / ( sn(:,:,1) + 1.e-20 ) 
     697          ELSE                           ! NO Sea surface salinity damping  
     698             zsrp = 0.e0 
     699             erp(:,:) = 0.e0 
     700          ENDIF 
     701 
     702          ! freshwater fluxes terms 
    696703          DO jj = 1, jpj 
    697704             DO ji = 1, jpi 
    698                 erp(ji,jj) = 0.e0  
    699705                emp(ji, jj) =  emp(ji,jj) - zsumemp * tmask(ji,jj,1) 
    700                 emps(ji, jj)=  emp(ji,jj) 
     706                emps(ji, jj)=  emp(ji,jj) + erp(ji,jj) 
    701707             END DO 
    702708          END DO 
     
    722728            WRITE(numout,*)'           zsumemp    = ',zsumemp 
    723729            WRITE(numout,*)'           zsurf      = ',zsurf  
    724             WRITE(numout,*)'           ztrp       = ',ztrp 
     730            WRITE(numout,*)'           dqdt0      = ',dqdt0 
     731            WRITE(numout,*)'           deds0      = ',deds0 
    725732            WRITE(numout,*)'           zconv      = ',zconv  
    726733         ENDIF 
     
    728735      ELSE 
    729736 
     737         ! Constant surface fluxes 
     738 
    730739         IF( kt == nit000 ) THEN 
    731  
    732             ! Read Namelist namflx : surface thermohaline fluxes 
    733             ! -------------------- 
    734             REWIND ( numnam ) 
    735             READ   ( numnam, namflx ) 
    736     
    737             IF(lwp) WRITE(numout,*)' ' 
    738             IF(lwp) WRITE(numout,*)' ocesbc  : Constant surface fluxes read in namelist' 
    739             IF(lwp) WRITE(numout,*)' ~~~~~~~ ' 
    740             IF(lwp) WRITE(numout,*)'           Namelist namflx: set the constant flux values' 
    741             IF(lwp) WRITE(numout,*)'              net heat flux          q0   = ', q0  , ' W/m2' 
    742             IF(lwp) WRITE(numout,*)'              solar heat flux        qsr0 = ', qsr0, ' W/m2' 
    743             IF(lwp) WRITE(numout,*)'              net heat flux          emp0 = ', emp0, ' W/m2' 
     740            IF(lwp) THEN 
     741               WRITE(numout,*)' ' 
     742               WRITE(numout,*)' ocesbc  : Constant surface fluxes read in namelist' 
     743               WRITE(numout,*)' ~~~~~~~ ' 
     744               WRITE(numout,*)'           Namelist namflx: set the constant flux values' 
     745               WRITE(numout,*)'              net heat flux          q0   = ', q0  , ' W/m2' 
     746               WRITE(numout,*)'              solar heat flux        qsr0 = ', qsr0, ' W/m2' 
     747               WRITE(numout,*)'              net heat flux          emp0 = ', emp0, ' W/m2' 
     748            ENDIF 
    744749 
    745750            qt    (:,:) = q0 
     
    752757            runoff(:,:) = 0.e0 
    753758         ENDIF 
     759 
    754760      ENDIF 
    755761 
     
    777783      INTEGER ::   ji, jj                   ! dummy loop indices 
    778784      REAL(wp), DIMENSION(jpi,jpj)  :: zsss, zfreeze 
    779       REAL(wp) ::   zerp, ztrp, zsrp 
     785      REAL(wp) ::   zerp, zsrp 
    780786      CHARACTER (len=71) :: charout 
    781787#if ! defined key_dynspg_rl 
     
    807813      ! -------------- 
    808814      ! Restoring coefficients on SST and SSS    
    809       IF( lk_cpl ) THEN 
    810          ztrp = 0.e0 
    811          zsrp = 0.e0 
    812       ELSE 
    813          ztrp  = -40.                   ! (W/m2/K)     
    814          zsrp  = ztrp * ro0cpr * rauw   ! (Kg/m2/s2)  
    815       ENDIF 
     815      zsrp = dqdt0 * ro0cpr * rauw   ! (Kg/m2/s)  
    816816 
    817817#if ! defined key_dynspg_rl  
  • trunk/NEMO/OPA_SRC/TRA/tradmp.F90

    r434 r440  
    2424   USE dtatem          ! temperature data 
    2525   USE dtasal          ! salinity data 
    26    USE dtasss          ! surface salinity data 
    2726   USE zdfmxl          ! mixed layer depth 
    2827   USE lib_mpp         ! distribued memory computing 
     
    4847   !! * Module variables 
    4948   INTEGER  ::             & !!! * newtonian damping namelist (mandmp) * 
    50       ndmp   =   -1 ,      &  ! = 0/-1/-2/'latitude' for damping over T and S 
     49      ndmp   =   -1 ,      &  ! = 0/-1/'latitude' for damping over T and S 
    5150      ndmpf  =    2 ,      &  ! = 1 create a damping.coeff NetCDF file  
    52       nmldmp =    0           ! = 0/1/2/3 flag for damping in the mixed layer 
     51      nmldmp =    0           ! = 0/1/2 flag for damping in the mixed layer 
    5352   REAL(wp) ::             & !!!  * newtonian damping namelist * 
    5453      sdmp   =   50.,      &  ! surface time scale for internal damping (days) 
     
    178177         END DO 
    179178 
    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  
    191179      END SELECT 
    192180 
     
    249237      SELECT CASE ( ndmp ) 
    250238 
    251       CASE ( -2 )               ! GYRE: damping SSS only 
    252          IF(lwp) WRITE(numout,*) '          SSS damping in Gyre' 
    253  
    254239      CASE ( -1 )               ! ORCA: damping in Red & Med Seas only 
    255240         IF(lwp) WRITE(numout,*) '          tracer damping in the Med & Red seas only' 
     
    276261      CASE ( 2 )                ! no damping in the mixed layer  
    277262         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' 
    281263 
    282264      CASE DEFAULT 
     
    293275         nstop = nstop + 1 
    294276      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  
    303277 
    304278 
     
    683657         resto(:,:,jpk) = 0.e0 
    684658 
    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  
    696659      ELSE 
    697660         !    ------------ 
  • trunk/NEMO/OPA_SRC/opa.F90

    r413 r440  
    4242   USE trdvor          ! vorticity trends              (trd_vor_init routine) 
    4343   USE trdmld          ! tracer mixed layer trends     (trd_mld_init routine) 
    44    USE flxfwb          !  
     44   USE flxfwb          ! freshwater budget correction  (flx_fwb_init routine) 
     45   USE flxmod          ! thermohaline forcing of the ocean (flx_init routine) 
    4546 
    4647   USE diaptr          ! poleward transports           (dia_ptr_init routine) 
     
    320321!!add 
    321322                       CALL eos( tb, sb, rhd, rhop )        ! before potential and in situ densities 
    322  
     323                        
    323324                       CALL bn2( tb, sb, rn2 )              ! before Brunt-Vaisala frequency 
    324325 
     
    372373#endif 
    373374 
     375      CALL flx_init                         ! Thermohaline forcing initialization 
     376 
    374377      CALL flx_fwb_init                     ! FreshWater Budget correction 
    375378 
Note: See TracChangeset for help on using the changeset viewer.