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 11741 for NEMO/branches/2019/dev_r11233_AGRIF-05_jchanut_vert_coord_interp/src/NST/agrif_oce_update.F90 – NEMO

Ignore:
Timestamp:
2019-10-21T12:26:39+02:00 (5 years ago)
Author:
jchanut
Message:

#2222: correct definition of parent vertical grid on the child domain to perform vertical interpolation at boundaries. Use additionnal parent depths and number of levels arrays interpolated on the child grid domain to do so.
Correction of vertical interpolation of viscosity remains to be done as well as duplication of changes for passive tracers.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • NEMO/branches/2019/dev_r11233_AGRIF-05_jchanut_vert_coord_interp/src/NST/agrif_oce_update.F90

    r11625 r11741  
    1 #undef DECAL_FEEDBACK  /* SEPARATION of INTERFACES*/ 
    2 #undef VOL_REFLUX      /* VOLUME REFLUXING*/ 
     1#undef DECAL_FEEDBACK     /* SEPARATION of INTERFACES */ 
     2#undef DECAL_FEEDBACK_2D  /* SEPARATION of INTERFACES (Barotropic mode) */ 
     3#undef VOL_REFLUX         /* VOLUME REFLUXING*/ 
    34  
    45MODULE agrif_oce_update 
     
    4849      IF (lwp.AND.lk_agrif_debug) Write(*,*) 'Update tracers  from grid Number',Agrif_Fixed() 
    4950 
     51! jc_alt      Agrif_UseSpecialValueInUpdate = .FALSE. 
    5052      Agrif_UseSpecialValueInUpdate = .TRUE. 
    5153      Agrif_SpecialValueFineGrid    = 0._wp 
     
    9294# endif 
    9395 
    94 # if ! defined DECAL_FEEDBACK 
     96# if ! defined DECAL_FEEDBACK_2D 
    9597      CALL Agrif_Update_Variable(e1u_id,procname = updateU2d) 
    9698      CALL Agrif_Update_Variable(e2v_id,procname = updateV2d)   
     
    100102# endif 
    101103      ! 
    102 # if ! defined DECAL_FEEDBACK 
     104# if ! defined DECAL_FEEDBACK_2D 
    103105      ! Account for updated thicknesses at boundary edges 
    104106      IF (.NOT.ln_linssh) THEN 
     
    110112      IF ( ln_dynspg_ts .AND. ln_bt_fw ) THEN 
    111113         ! Update time integrated transports 
    112 #  if ! defined DECAL_FEEDBACK 
     114#  if ! defined DECAL_FEEDBACK_2D 
    113115         CALL Agrif_Update_Variable(ub2b_update_id,procname = updateub2b) 
    114116         CALL Agrif_Update_Variable(vb2b_update_id,procname = updatevb2b) 
     
    130132      Agrif_UseSpecialValueInUpdate = .TRUE. 
    131133      Agrif_SpecialValueFineGrid = 0. 
    132 # if ! defined DECAL_FEEDBACK 
     134# if ! defined DECAL_FEEDBACK_2D 
    133135      CALL Agrif_Update_Variable(sshn_id,procname = updateSSH) 
    134136# else 
     
    141143      IF ( ln_dynspg_ts.AND.ln_bt_fw ) THEN 
    142144         ! Refluxing on ssh: 
    143 #  if defined DECAL_FEEDBACK 
     145#  if defined DECAL_FEEDBACK_2D 
    144146         CALL Agrif_Update_Variable(ub2b_update_id,locupdate1=(/0, 0/),locupdate2=(/1, 1/),procname = reflux_sshu) 
    145147         CALL Agrif_Update_Variable(vb2b_update_id,locupdate1=(/1, 1/),locupdate2=(/0, 0/),procname = reflux_sshv) 
     
    299301                  DO ji=i1,i2 
    300302                     tabres(ji,jj,jk,jn) = (tsn(ji,jj,jk,jn) * e3t_n(ji,jj,jk) ) & 
    301                                            * tmask(ji,jj,jk) + (tmask(ji,jj,jk)-1._wp)*999._wp 
     303                                         &  * tmask(ji,jj,jk) + (tmask(ji,jj,jk)-1._wp) * 999._wp 
     304!jc_alt                     tabres(ji,jj,jk,jn) = tsn(ji,jj,jk,jn) * e3t_n(ji,jj,jk) 
    302305                  END DO 
    303306               END DO 
     
    307310            DO jj=j1,j2 
    308311               DO ji=i1,i2 
    309                   tabres(ji,jj,jk,n2) = tmask(ji,jj,jk) * e3t_n(ji,jj,jk) & 
    310                                            + (tmask(ji,jj,jk)-1)*999._wp 
     312                  tabres(ji,jj,jk,n2) =      tmask(ji,jj,jk) * e3t_n(ji,jj,jk) & 
     313                                      &   + (tmask(ji,jj,jk) - 1._wp) * 999._wp 
     314! jc_alt                  tabres(ji,jj,jk,n2) = tmask(ji,jj,jk) * e3t_n(ji,jj,jk) 
    311315               END DO 
    312316            END DO 
     
    320324               DO jk=k1,k2 !k2 = jpk of child grid 
    321325                  IF (tabres(ji,jj,jk,n2) < -900._wp  ) EXIT 
     326! jc_alt                  IF (tabres(ji,jj,jk,n2) == 0._wp  ) EXIT 
    322327                  N_in = N_in + 1 
    323328                  tabin(jk,:) = tabres(ji,jj,jk,n1:n2-1)/tabres(ji,jj,jk,n2) 
     
    476481               DO ji=i1,i2 
    477482                  tabres(ji,jj,jk,1) = zrhoy * e2u(ji,jj) * e3u_n(ji,jj,jk) * umask(ji,jj,jk) * un(ji,jj,jk)  & 
    478                                        + (umask(ji,jj,jk)-1)*999._wp 
     483                                     &  + (umask(ji,jj,jk)-1._wp)*999._wp 
     484! jc_alt                  tabres(ji,jj,jk,1) = zrhoy * e2u(ji,jj) * e3u_n(ji,jj,jk) * umask(ji,jj,jk) * un(ji,jj,jk)   
    479485                  tabres(ji,jj,jk,2) = zrhoy * umask(ji,jj,jk) * e2u(ji,jj) * e3u_n(ji,jj,jk)  & 
    480                                        + (umask(ji,jj,jk)-1)*999._wp 
     486                                     &  + (umask(ji,jj,jk)-1._wp)*999._wp 
     487! jc_alt                  tabres(ji,jj,jk,2) = zrhoy * umask(ji,jj,jk) * e2u(ji,jj) * e3u_n(ji,jj,jk) 
    481488               END DO 
    482489            END DO 
     
    491498               tabin(:) = 0._wp 
    492499               DO jk=k1,k2 !k2=jpk of child grid 
    493                   IF( tabres(ji,jj,jk,2) < -900) EXIT 
     500                  IF( tabres(ji,jj,jk,2) < -900._wp) EXIT 
     501! jc_alt                  IF( tabres(ji,jj,jk,2) == 0.) EXIT 
    494502                  N_in = N_in + 1 
    495503                  tabin(jk) = tabres(ji,jj,jk,1)/tabres(ji,jj,jk,2) 
     
    671679               DO ji=i1,i2 
    672680                  tabres(ji,jj,jk,1) = zrhox * e1v(ji,jj) * e3v_n(ji,jj,jk) * vmask(ji,jj,jk) * vn(ji,jj,jk) & 
    673                                        + (vmask(ji,jj,jk)-1)*999._wp 
    674                   tabres(ji,jj,jk,2) = vmask(ji,jj,jk) * zrhox * e1v(ji,jj) * e3v_n(ji,jj,jk) & 
    675                                        + (vmask(ji,jj,jk)-1)*999._wp 
     681                                     & + (vmask(ji,jj,jk)-1._wp) * 999._wp 
     682! jc_alt                  tabres(ji,jj,jk,1) = zrhox * e1v(ji,jj) * e3v_n(ji,jj,jk) * vmask(ji,jj,jk) * vn(ji,jj,jk)  
     683                  tabres(ji,jj,jk,1) = zrhox * e1v(ji,jj) * e3v_n(ji,jj,jk) * vmask(ji,jj,jk) * vn(ji,jj,jk) & 
     684                                     & + (vmask(ji,jj,jk)-1._wp) * 999._wp 
     685! jc_alt                  tabres(ji,jj,jk,1) = zrhox * e1v(ji,jj) * e3v_n(ji,jj,jk) * vmask(ji,jj,jk) * vn(ji,jj,jk) 
    676686               END DO 
    677687            END DO 
     
    684694               N_in = 0 
    685695               DO jk=k1,k2 
    686                   IF (tabres(ji,jj,jk,2) < -900) EXIT 
     696                  IF (tabres(ji,jj,jk,2) < -900._wp) EXIT 
     697! jc_alt                  IF (tabres(ji,jj,jk,2) == 0) EXIT 
    687698                  N_in = N_in + 1 
    688699                  tabin(jk) = tabres(ji,jj,jk,1)/tabres(ji,jj,jk,2) 
Note: See TracChangeset for help on using the changeset viewer.