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 6630 for branches/UKMO/dev_r5518_v3.4_asm_nemovar_community/NEMOGCM/NEMO/OPA_SRC/ASM/asminc.F90 – NEMO

Ignore:
Timestamp:
2016-05-26T18:28:12+02:00 (8 years ago)
Author:
kingr
Message:

Adpated changes required to apply 2D surft increments in AMM7 from NEMO3.4 branch /branches/dev/frwe/vn3.4_ASM_NEMOVAR_community.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • branches/UKMO/dev_r5518_v3.4_asm_nemovar_community/NEMOGCM/NEMO/OPA_SRC/ASM/asminc.F90

    r6625 r6630  
    4040#endif 
    4141   USE sbc_oce          ! Surface boundary condition variables. 
     42   USE zdfmxl, ONLY :  &   
     43   &  hmld_tref,       &    
     44#if defined key_karaml 
     45   &  hmld_kara,       & 
     46   &  ln_kara,         & 
     47#endif    
     48   &  hmld,            &  
     49   &  hmlp,            & 
     50   &  hmlpt 
     51#if defined key_bdy  
     52   USE bdy_oce, ONLY: bdytmask   
     53#endif   
    4254 
    4355   IMPLICIT NONE 
     
    88100   REAL(wp), DIMENSION(:,:), ALLOCATABLE ::   seaice_bkginc         ! Increment to the background sea ice conc 
    89101 
     102   INTEGER :: mld_choice        = 4   !: choice of mld criteria to use for physics assimilation 
     103                                      !: 1) hmld      - Turbocline/mixing depth                           [W points] 
     104                                      !: 2) hmlp      - Density criterion (0.01 kg/m^3 change from 10m)   [W points] 
     105                                      !: 3) hmld_kara - Kara MLD                                          [Interpolated] 
     106                                      !: 4) hmld_tref - Temperature criterion (0.2 K change from surface) [T points] 
     107 
     108 
    90109   !! * Substitutions 
    91110#  include "domzgr_substitute.h90" 
     
    127146      REAL(wp) :: zdate_inc    ! Time axis in increments file 
    128147      ! 
     148      REAL(wp), ALLOCATABLE, DIMENSION(:,:) :: &  
     149          &       t_bkginc_2d  ! file for reading in 2D   
     150      !                        ! temperature increments  
     151      REAL(wp), ALLOCATABLE, DIMENSION(:,:) :: &  
     152          &       z_mld     ! Mixed layer depth  
     153           
    129154      REAL(wp), POINTER, DIMENSION(:,:) ::   hdiv   ! 2D workspace 
    130155      !! 
     
    133158         &                 ln_asmdin, ln_asmiau,                           & 
    134159         &                 nitbkg, nitdin, nitiaustr, nitiaufin, niaufn,   & 
    135          &                 ln_salfix, salfixmin, nn_divdmp 
     160         &                 ln_salfix, salfixmin, nn_divdmp, mld_choice 
    136161      !!---------------------------------------------------------------------- 
    137162 
     
    139164      ! Read Namelist nam_asminc : assimilation increment interface 
    140165      !----------------------------------------------------------------------- 
     166 
     167      ! Set default values 
     168      ln_bkgwri = .FALSE. 
     169      ln_trainc = .FALSE. 
     170      ln_dyninc = .FALSE. 
     171      ln_sshinc = .FALSE. 
    141172      ln_seaiceinc = .FALSE. 
     173      ln_asmdin = .FALSE. 
     174      ln_asmiau = .TRUE. 
     175      ln_salfix = .FALSE. 
    142176      ln_temnofreeze = .FALSE. 
     177      salfixmin = -9999 
     178      nitbkg    = 0 
     179      nitdin    = 0       
     180      nitiaustr = 1 
     181      nitiaufin = 150 
     182      niaufn    = 0 
    143183 
    144184      REWIND( numnam_ref )              ! Namelist nam_asminc in reference namelist : Assimilation increment 
     
    171211         WRITE(numout,*) '      Logical switch for ensuring that the sa > salfixmin      ln_salfix = ', ln_salfix 
    172212         WRITE(numout,*) '      Minimum salinity after applying the increments           salfixmin = ', salfixmin 
     213         WRITE(numout,*) '      Choice of MLD for physics assimilation                  mld_choice = ', mld_choice 
    173214      ENDIF 
    174215 
     
    327368      !-------------------------------------------------------------------- 
    328369 
    329       ALLOCATE( t_bkginc(jpi,jpj,jpk) ) 
    330       ALLOCATE( s_bkginc(jpi,jpj,jpk) ) 
    331       ALLOCATE( u_bkginc(jpi,jpj,jpk) ) 
    332       ALLOCATE( v_bkginc(jpi,jpj,jpk) ) 
    333       ALLOCATE( ssh_bkginc(jpi,jpj)   ) 
    334       ALLOCATE( seaice_bkginc(jpi,jpj)) 
     370      IF ( ln_trainc ) THEN 
     371         ALLOCATE( t_bkginc(jpi,jpj,jpk) ) 
     372         ALLOCATE( s_bkginc(jpi,jpj,jpk) ) 
     373         t_bkginc(:,:,:) = 0.0 
     374         s_bkginc(:,:,:) = 0.0 
     375      ENDIF 
     376      IF ( ln_dyninc ) THEN  
     377         ALLOCATE( u_bkginc(jpi,jpj,jpk) ) 
     378         ALLOCATE( v_bkginc(jpi,jpj,jpk) ) 
     379         u_bkginc(:,:,:) = 0.0 
     380         v_bkginc(:,:,:) = 0.0 
     381      ENDIF 
     382      IF ( ln_sshinc ) THEN 
     383         ALLOCATE( ssh_bkginc(jpi,jpj)   ) 
     384         ssh_bkginc(:,:) = 0.0 
     385      ENDIF 
     386      IF ( ln_seaiceinc ) THEN  
     387         ALLOCATE( seaice_bkginc(jpi,jpj)) 
     388         seaice_bkginc(:,:) = 0.0 
     389      ENDIF 
    335390#if defined key_asminc 
    336391      ALLOCATE( ssh_iau(jpi,jpj)      ) 
    337 #endif 
    338       t_bkginc(:,:,:) = 0.0 
    339       s_bkginc(:,:,:) = 0.0 
    340       u_bkginc(:,:,:) = 0.0 
    341       v_bkginc(:,:,:) = 0.0 
    342       ssh_bkginc(:,:) = 0.0 
    343       seaice_bkginc(:,:) = 0.0 
    344 #if defined key_asminc 
    345392      ssh_iau(:,:)    = 0.0 
    346393#endif 
     
    378425 
    379426         IF ( ln_trainc ) THEN    
    380             CALL iom_get( inum, jpdom_autoglo, 'bckint', t_bkginc, 1 ) 
    381             CALL iom_get( inum, jpdom_autoglo, 'bckins', s_bkginc, 1 ) 
    382             ! Apply the masks 
    383             t_bkginc(:,:,:) = t_bkginc(:,:,:) * tmask(:,:,:) 
    384             s_bkginc(:,:,:) = s_bkginc(:,:,:) * tmask(:,:,:) 
    385             ! Set missing increments to 0.0 rather than 1e+20 
    386             ! to allow for differences in masks 
    387             WHERE( ABS( t_bkginc(:,:,:) ) > 1.0e+10 ) t_bkginc(:,:,:) = 0.0 
    388             WHERE( ABS( s_bkginc(:,:,:) ) > 1.0e+10 ) s_bkginc(:,:,:) = 0.0 
     427             
     428            IF (ln_sco) THEN  
     429                 
     430               ALLOCATE(z_mld(jpi,jpj))  
     431               SELECT CASE(mld_choice)  
     432               CASE(1)  
     433                  z_mld = hmld  
     434               CASE(2)  
     435                  z_mld = hmlp  
     436               CASE(3)  
     437#if defined key_karaml 
     438                  IF ( ln_kara ) THEN 
     439                     z_mld = hmld_kara 
     440                  ELSE 
     441                     CALL ctl_stop("Kara mixed layer not calculated as ln_kara=.false.") 
     442                  ENDIF 
     443#else 
     444                  CALL ctl_stop("Kara mixed layer not defined in current version of NEMO")  ! JW: Safety feature, should be removed 
     445                                                                                            ! once the Kara mixed layer is available  
     446#endif 
     447               CASE(4)  
     448                  z_mld = hmld_tref  
     449               END SELECT        
     450                       
     451               ALLOCATE( t_bkginc_2d(jpi,jpj) )  
     452               CALL iom_get( inum, jpdom_autoglo, 'bckinsurft', t_bkginc_2d, 1)  
     453#if defined key_bdy                 
     454               DO jk = 1,jpkm1  
     455                  WHERE( z_mld(:,:) > fsdepw(:,:,jk) )  
     456                     t_bkginc(:,:,jk) = t_bkginc_2d(:,:) * 0.5 * & 
     457                     &       ( 1 + cos( (fsdept(:,:,jk)/z_mld(:,:) ) * rpi ) ) 
     458                      
     459                     t_bkginc(:,:,jk) = t_bkginc(:,:,jk) * bdytmask(:,:)  
     460                  ELSEWHERE  
     461                     t_bkginc(:,:,jk) = 0.  
     462                  ENDWHERE  
     463               ENDDO  
     464#else  
     465               t_bkginc(:,:,:) = 0.  
     466#endif                 
     467               s_bkginc(:,:,:) = 0.  
     468                 
     469               DEALLOCATE(z_mld, t_bkginc_2d)  
     470             
     471            ELSE  
     472                
     473               CALL iom_get( inum, jpdom_autoglo, 'bckint', t_bkginc, 1 ) 
     474               CALL iom_get( inum, jpdom_autoglo, 'bckins', s_bkginc, 1 ) 
     475               ! Apply the masks 
     476               t_bkginc(:,:,:) = t_bkginc(:,:,:) * tmask(:,:,:) 
     477               s_bkginc(:,:,:) = s_bkginc(:,:,:) * tmask(:,:,:) 
     478               ! Set missing increments to 0.0 rather than 1e+20 
     479               ! to allow for differences in masks 
     480               WHERE( ABS( t_bkginc(:,:,:) ) > 1.0e+10 ) t_bkginc(:,:,:) = 0.0 
     481               WHERE( ABS( s_bkginc(:,:,:) ) > 1.0e+10 ) s_bkginc(:,:,:) = 0.0 
     482          
     483            ENDIF 
     484          
    389485         ENDIF 
    390486 
Note: See TracChangeset for help on using the changeset viewer.