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

Changeset 2002


Ignore:
Timestamp:
2010-07-09T14:19:55+02:00 (14 years ago)
Author:
djlea
Message:

Adding ASM assimilation code

Location:
branches/dev_1784_ASM/NEMO/OPA_SRC
Files:
4 added
5 edited

Legend:

Unmodified
Added
Removed
  • branches/dev_1784_ASM/NEMO/OPA_SRC/DYN/sshwzv.F90

    r1756 r2002  
    55   !!============================================================================== 
    66   !! History :  3.1  !  2009-02  (G. Madec, M. Leclair)  Original code 
     7   !!            3.3  !  2010-05  (K. Mogensen, A. Weaver, M. Martin, D. Lea) Assimilation interface 
    78   !!---------------------------------------------------------------------- 
    89 
     
    2728   USE diaar5, ONLY :   lk_diaar5 
    2829   USE iom 
     30   USE asminc          ! Assimilation increment 
    2931 
    3032   IMPLICIT NONE 
     
    187189      ENDIF 
    188190 
     191! Include the IAU weighted SSH increment 
     192      IF( ( lk_asminc ).AND.( ln_sshinc ).AND.( ln_asmiau ) ) THEN 
     193         CALL ssh_asm_inc( kt ) 
     194         ssha(:,:) = ssha(:,:) + z2dt * ssh_iau(:,:) 
     195      ENDIF 
     196 
    189197      !                                           !------------------------------! 
    190198      !                                           !     Now Vertical Velocity    ! 
  • branches/dev_1784_ASM/NEMO/OPA_SRC/TRA/tradmp.F90

    r1601 r2002  
    4747   LOGICAL, PUBLIC            ::   lk_tradmp = .TRUE.     !: internal damping flag 
    4848#endif 
     49   REAL(wp), PUBLIC, DIMENSION(jpi,jpj,jpk) ::   strdmp   !: damping salinity trend (psu/s) 
     50   REAL(wp), PUBLIC, DIMENSION(jpi,jpj,jpk) ::   ttrdmp   !: damping temperature trend (Centigrade/s) 
    4951   REAL(wp), PUBLIC, DIMENSION(jpi,jpj,jpk) ::   resto    !: restoring coeff. on T and S (s-1) 
    5052    
     
    9193      INTEGER, INTENT(in) ::   kt   ! ocean time-step index 
    9294      !! 
     95      REAL(wp) ::   zta, zsa       ! temporary scalars 
    9396      INTEGER ::   ji, jj, jk   ! dummy loop indices 
    9497      !!---------------------------------------------------------------------- 
     
    107110            DO jj = 2, jpjm1 
    108111               DO ji = fs_2, fs_jpim1   ! vector opt. 
    109                   ta(ji,jj,jk) = ta(ji,jj,jk) + resto(ji,jj,jk) * ( t_dta(ji,jj,jk) - tb(ji,jj,jk) ) 
    110                   sa(ji,jj,jk) = sa(ji,jj,jk) + resto(ji,jj,jk) * ( s_dta(ji,jj,jk) - sb(ji,jj,jk) ) 
     112                  zta = resto(ji,jj,jk) * ( t_dta(ji,jj,jk) - tb(ji,jj,jk) ) 
     113                  zsa = resto(ji,jj,jk) * ( s_dta(ji,jj,jk) - sb(ji,jj,jk) ) 
     114                  ! add the trends to the general tracer trends 
     115                  ta(ji,jj,jk) = ta(ji,jj,jk) + zta 
     116                  sa(ji,jj,jk) = sa(ji,jj,jk) + zsa 
     117                  ! save the salinity trend (used in asmtrj) 
     118                  strdmp(ji,jj,jk) = zsa 
     119                  ttrdmp(ji,jj,jk) = zta 
    111120               END DO 
    112121            END DO 
     
    118127               DO ji = fs_2, fs_jpim1   ! vector opt. 
    119128                  IF( avt(ji,jj,jk) <= 5.e-4 ) THEN 
    120                      ta(ji,jj,jk) = ta(ji,jj,jk) + resto(ji,jj,jk) * ( t_dta(ji,jj,jk) - tb(ji,jj,jk) ) 
    121                      sa(ji,jj,jk) = sa(ji,jj,jk) + resto(ji,jj,jk) * ( s_dta(ji,jj,jk) - sb(ji,jj,jk) ) 
     129                     zta = resto(ji,jj,jk) * ( t_dta(ji,jj,jk) - tb(ji,jj,jk) ) 
     130                     zsa = resto(ji,jj,jk) * ( s_dta(ji,jj,jk) - sb(ji,jj,jk) ) 
     131                  ELSE 
     132                     zta = 0.e0 
     133                     zsa = 0.e0    
    122134                  ENDIF 
     135                  ! add the trends to the general tracer trends 
     136                  ta(ji,jj,jk) = ta(ji,jj,jk) + zta 
     137                  sa(ji,jj,jk) = sa(ji,jj,jk) + zsa 
     138                  ! save the salinity trend (used in asmtrj) 
     139                  strdmp(ji,jj,jk) = zsa 
     140                  ttrdmp(ji,jj,jk) = zta 
    123141               END DO 
    124142            END DO 
     
    130148               DO ji = fs_2, fs_jpim1   ! vector opt. 
    131149                  IF( fsdept(ji,jj,jk) >= hmlp (ji,jj) ) THEN 
    132                      ta(ji,jj,jk) = ta(ji,jj,jk) + resto(ji,jj,jk) * ( t_dta(ji,jj,jk) - tb(ji,jj,jk) ) 
    133                      sa(ji,jj,jk) = sa(ji,jj,jk) + resto(ji,jj,jk) * ( s_dta(ji,jj,jk) - sb(ji,jj,jk) ) 
     150                     zta = resto(ji,jj,jk) * ( t_dta(ji,jj,jk) - tb(ji,jj,jk) ) 
     151                     zsa = resto(ji,jj,jk) * ( s_dta(ji,jj,jk) - sb(ji,jj,jk) ) 
     152                  ELSE 
     153                     zta = 0.e0 
     154                     zsa = 0.e0    
    134155                  ENDIF 
     156                  ! add the trends to the general tracer trends 
     157                  ta(ji,jj,jk) = ta(ji,jj,jk) + zta 
     158                  sa(ji,jj,jk) = sa(ji,jj,jk) + zsa 
     159                  ! save the salinity trend (used in asmtrj) 
     160                  strdmp(ji,jj,jk) = zsa 
     161                  ttrdmp(ji,jj,jk) = zta 
    135162               END DO 
    136163            END DO 
     
    199226         &   CALL ctl_stop( 'no temperature and/or salinity data define key_dtatem and key_dtasal' ) 
    200227 
     228      strdmp(:,:,:) = 0.e0       ! internal damping salinity trend (used in asmtrj) 
     229      ttrdmp(:,:,:) = 0.e0 
    201230      !                          ! Damping coefficients initialization 
    202231      IF( lzoom ) THEN   ;   CALL dtacof_zoom 
  • branches/dev_1784_ASM/NEMO/OPA_SRC/ZDF/zdftke.F90

    r1756 r2002  
    8787 
    8888   REAL(wp), DIMENSION(jpi,jpj)     ::   htau      ! depth of tke penetration (nn_htau) 
    89    REAL(wp), DIMENSION(jpi,jpj,jpk) ::   en        ! now turbulent kinetic energy   [m2/s2] 
     89   REAL(wp), PUBLIC, DIMENSION(jpi,jpj,jpk) ::   en        ! now turbulent kinetic energy   [m2/s2] 
    9090   REAL(wp), DIMENSION(jpi,jpj,jpk) ::   dissl     ! now mixing lenght of dissipation 
    9191 
  • branches/dev_1784_ASM/NEMO/OPA_SRC/opa.F90

    r1725 r2002  
    2525   !!             -   ! 2007-07  (J. Chanut, A. Sellar) Unstructured open boundaries (BDY) 
    2626   !!            3.2  ! 2009-08  (S. Masson)  open/write in the listing file in mpp 
     27   !!            3.3  ! 2010-05  (K. Mogensen, A. Weaver, M. Martin, D. Lea) Assimilation interface  
    2728   !!---------------------------------------------------------------------- 
    2829 
     
    5354   USE phycst          ! physical constant                  (par_cst routine) 
    5455   USE trdmod          ! momentum/tracers trends       (trd_mod_init routine) 
     56   USE asminc          ! assimilation increments       (asm_inc_init routine) 
     57   USE asmtrj          ! writing out state trajectory 
     58   USE sshwzv          ! vertical velocity used in asm 
    5559   USE diaptr          ! poleward transports           (dia_ptr_init routine) 
    5660   USE step            ! OPA time-stepping                  (stp     routine) 
     
    133137         END DO 
    134138      ELSE                              !==  3D ocean with  ==! 
     139          IF( lk_asminc ) THEN 
     140             IF( ln_bkgwri ) CALL asm_bkg_wri( nit000 - 1 )    ! Output background fields 
     141             IF( ln_trjwri ) CALL asm_trj_wri( nit000 - 1 )    ! Output trajectory fields 
     142             IF( ln_asmdin ) THEN                        ! Direct initialization 
     143                IF( ln_trainc ) CALL tra_asm_inc( nit000 - 1 )    ! Tracers 
     144                IF( ln_dyninc ) THEN  
     145                   CALL dyn_asm_inc( nit000 - 1 )    ! Dynamics 
     146                   IF ( ln_asmdin ) CALL ssh_wzv ( nit000 - 1 )      ! update vertical velocity  
     147                ENDIF 
     148                IF( ln_sshinc ) CALL ssh_asm_inc( nit000 - 1 )    ! SSH 
     149             ENDIF 
     150          ENDIF 
     151         
    135152         DO WHILE ( istp <= nitend .AND. nstop == 0 ) 
    136153#if defined key_agrif 
     
    271288      CALL dia_ptr_init                         ! Poleward TRansports initialization 
    272289      CALL trd_mod_init                         ! Mixed-layer/Vorticity/Integral constraints trends 
     290 
     291      IF( lk_asminc ) CALL asm_inc_init     ! Initialize assimilation increments 
     292      IF(lwp) WRITE(numout,*)'Euler time step switch is ', neuler 
     293 
    273294      ! 
    274295   END SUBROUTINE opa_init 
  • branches/dev_1784_ASM/NEMO/OPA_SRC/step.F90

    r1756 r2002  
    2121   !!            3.2  !  2009-02  (G. Madec, R. Benshila)  reintroduicing z*-coordinate 
    2222   !!             -   !  2009-06  (S. Masson, G. Madec)  TKE restart compatible with key_cpl 
     23   !!            3.3  !  2010-05  (K. Mogensen, A. Weaver, M. Martin, D. Lea) Assimilation interface 
    2324   !!---------------------------------------------------------------------- 
    2425 
     
    113114   USE floats          ! floats computation               (flo_stp routine) 
    114115 
     116   USE asminc          ! assimilation increments    (tra_asm_inc, dyn_asm_inc routines) 
    115117   USE stpctl          ! time stepping control            (stp_ctl routine) 
    116118   USE restart         ! ocean restart                    (rst_wri routine) 
     
    262264                             sa(:,:,:) = 0.e0 
    263265 
     266      IF(  ln_asmiau .AND. & 
     267         & ln_trainc     )   CALL tra_asm_inc( kstp )       ! apply tracer assimilation increment 
    264268                             CALL tra_sbc    ( kstp )       ! surface boundary condition 
    265269      IF( ln_traqsr      )   CALL tra_qsr    ( kstp )       ! penetrative solar radiation qsr 
     
    300304                               va(:,:,:) = 0.e0 
    301305 
     306      IF(  ln_asmiau .AND. & 
     307         & ln_dyninc     )     CALL dyn_asm_inc( kstp )       ! apply dynamics assimilation increment 
    302308                               CALL dyn_adv( kstp )         ! advection (vector or flux form) 
    303309                               CALL dyn_vor( kstp )         ! vorticity term including Coriolis 
Note: See TracChangeset for help on using the changeset viewer.