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

Changeset 6630


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.

Location:
branches/UKMO/dev_r5518_v3.4_asm_nemovar_community/NEMOGCM/NEMO/OPA_SRC
Files:
3 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 
  • branches/UKMO/dev_r5518_v3.4_asm_nemovar_community/NEMOGCM/NEMO/OPA_SRC/ZDF/zdfmxl.F90

    r6626 r6630  
    3333   REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:) ::   hmlp    !: mixed layer depth  (rho=rho0+zdcrit) [m] 
    3434   REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:) ::   hmlpt   !: mixed layer depth at t-points        [m] 
     35   REAL(wp), PUBLIC, ALLOCATABLE, SAVE, DIMENSION(:,:) ::   hmld_tref  !: mixed layer depth at t-points - temperature criterion [m] 
    3536 
    3637   REAL(wp), PUBLIC ::   rho_c = 0.01_wp    !: density criterion for mixed layer depth 
     
    5253      zdf_mxl_alloc = 0      ! set to zero if no array to be allocated 
    5354      IF( .NOT. ALLOCATED( nmln ) ) THEN 
    54          ALLOCATE( nmln(jpi,jpj), hmld(jpi,jpj), hmlp(jpi,jpj), hmlpt(jpi,jpj), STAT= zdf_mxl_alloc ) 
     55         ALLOCATE( nmln(jpi,jpj), hmld(jpi,jpj), hmlp(jpi,jpj), hmlpt(jpi,jpj), & 
     56         &                           hmld_tref(jpi,jpj), STAT= zdf_mxl_alloc ) 
    5557         ! 
    5658         IF( lk_mpp             )   CALL mpp_sum ( zdf_mxl_alloc ) 
     
    8486      REAL(wp) ::   zN2_c        ! local scalar 
    8587      INTEGER, POINTER, DIMENSION(:,:) ::   imld   ! 2D workspace 
     88      REAL(wp) ::   t_ref               ! Reference temperature   
     89      REAL(wp) ::   temp_c = 0.2        ! temperature criterion for mixed layer depth   
    8690      !!---------------------------------------------------------------------- 
    8791      ! 
     
    137141         CALL iom_put( "mldkz5"  , hmld )   ! turbocline depth 
    138142      ENDIF 
     143 
     144      !For the AMM model assimiation uses a temperature based mixed layer depth   
     145      !This is defined here   
     146      DO jj = 1, jpj   
     147         DO ji = 1, jpi   
     148           hmld_tref(ji,jj)=fsdept(ji,jj,1  )    
     149           IF(ssmask(ji,jj) > 0.)THEN   
     150             t_ref=tsn(ji,jj,1,jp_tem)  
     151             DO jk=2,jpk   
     152               IF(ssmask(ji,jj)==0.)THEN   
     153                  hmld_tref(ji,jj)=fsdept(ji,jj,jk )   
     154                  EXIT   
     155               ELSEIF( ABS(tsn(ji,jj,jk,jp_tem)-t_ref) < temp_c)THEN   
     156                  hmld_tref(ji,jj)=fsdept(ji,jj,jk )   
     157               ELSE   
     158                  EXIT   
     159               ENDIF   
     160             ENDDO   
     161           ENDIF   
     162         ENDDO   
     163      ENDDO 
    139164       
    140165      IF(ln_ctl)   CALL prt_ctl( tab2d_1=REAL(nmln,wp), clinfo1=' nmln : ', tab2d_2=hmlp, clinfo2=' hmlp : ', ovlap=1 ) 
  • branches/UKMO/dev_r5518_v3.4_asm_nemovar_community/NEMOGCM/NEMO/OPA_SRC/nemogcm.F90

    r6626 r6630  
    473473 
    474474      !                                     ! Assimilation increments 
    475       IF( lk_asminc     )   CALL asm_inc_init   ! Initialize assimilation increments 
     475      IF( lk_asminc ) THEN  
     476#if defined key_shelf  
     477         ios = zdf_mxl_alloc() 
     478         nmln(:,:) = nlb10           ! Initialization of nmln 
     479#endif  
     480         CALL asm_inc_init     ! Initialize assimilation increments  
     481      ENDIF 
     482            
    476483      IF(lwp) WRITE(numout,*) 'Euler time step switch is ', neuler 
    477484      ! 
Note: See TracChangeset for help on using the changeset viewer.