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 5601 for branches/2015/dev_r5003_MERCATOR6_CRS/NEMOGCM/NEMO/OPA_SRC/CRS/crsfld.F90 – NEMO

Ignore:
Timestamp:
2015-07-16T11:04:29+02:00 (9 years ago)
Author:
cbricaud
Message:

commit changes/bugfix/... for crs ; ok with time-splitting/fixed volume

File:
1 edited

Legend:

Unmodified
Added
Removed
  • branches/2015/dev_r5003_MERCATOR6_CRS/NEMOGCM/NEMO/OPA_SRC/CRS/crsfld.F90

    r5105 r5601  
    1717   USE zdf_oce         ! vertical  physics: ocean fields 
    1818   USE zdfddm          ! vertical  physics: double diffusion 
     19   USe zdfmxl 
    1920   USE lbclnk          ! ocean lateral boundary conditions (or mpp link) 
    2021   USE in_out_manager  ! I/O manager 
     
    2526   USE crslbclnk 
    2627   USE iom 
     28   USE zdfmxl_crs 
    2729 
    2830   IMPLICIT NONE 
     
    6466      REAL(wp), POINTER, DIMENSION(:,:,:) :: zfse3t, zfse3u, zfse3v, zfse3w ! 3D workspace for e3 
    6567      REAL(wp), POINTER, DIMENSION(:,:,:) :: zt, zs  
     68      REAL(wp), POINTER, DIMENSION(:,:)   :: z2d,z2d_crs 
    6669      REAL(wp), POINTER, DIMENSION(:,:,:) :: zt_crs, zs_crs ! 
    6770      REAL(wp)       :: z2dcrsu, z2dcrsv 
     
    7174      INTEGER ::  iji,ijj 
    7275      !! 
    73        !!---------------------------------------------------------------------- 
    74       !  
    75       !IF(narea==267)WRITE(narea+5000,*)"========================================> crsfldt ",kt 
     76      !!---------------------------------------------------------------------- 
    7677 
    7778      IF( nn_timing == 1 )   CALL timing_start('crs_fld') 
     
    8081      CALL wrk_alloc( jpi, jpj, jpk, zfse3t, zfse3w ) 
    8182      CALL wrk_alloc( jpi, jpj, jpk, zfse3u, zfse3v ) 
    82       CALL wrk_alloc( jpi, jpj, jpk, zt, zs       ) 
     83      CALL wrk_alloc( jpi, jpj, jpk, zt, zs         ) 
     84      CALL wrk_alloc( jpi, jpj,      z2d            ) 
    8385      ! 
    8486      CALL wrk_alloc( jpi_crs, jpj_crs, jpk, zt_crs, zs_crs ) 
     87      CALL wrk_alloc( jpi_crs, jpj_crs, z2d_crs     ) 
    8588 
    8689      ! Depth work arrrays 
     
    130133      zs(:,:,:) = tsb(:,:,:,jp_sal)  ;      zs_crs(:,:,:) = 0._wp 
    131134      CALL crs_dom_ope( zs, 'VOL', 'T', tmask, zs_crs, p_e12=e1e2t, p_e3=zfse3t, psgn=1.0 ) 
    132       tsb_crs(:,:,:,jp_sal) = zt_crs(:,:,:) 
     135      tsb_crs(:,:,:,jp_sal) = zs_crs(:,:,:) 
    133136      zs(:,:,:) = tsn(:,:,:,jp_sal)  ;      zs_crs(:,:,:) = 0._wp 
    134137      CALL crs_dom_ope( zs, 'VOL', 'T', tmask, zs_crs, p_e12=e1e2t, p_e3=zfse3t, psgn=1.0 ) 
    135       tsn_crs(:,:,:,jp_sal) = zt_crs(:,:,:) 
     138      tsn_crs(:,:,:,jp_sal) = zs_crs(:,:,:) 
    136139 
    137140      CALL iom_put( "soce" , tsn_crs(:,:,:,jp_sal) )    ! sal 
     
    162165 
    163166      !  V-velocity 
    164       !IF(narea==267)WRITE(narea+5000,*)"deg vb_crs" 
    165167      CALL crs_dom_ope( vb, 'SUM', 'V', vmask, vb_crs, p_e12=e1v, p_e3=zfse3v, p_surf_crs=e1e3v_msk, psgn=-1.0 ) 
    166       !IF(narea==267)WRITE(narea+5000,*)"deg vn_crs" 
    167168      CALL crs_dom_ope( vn, 'SUM', 'V', vmask, vn_crs, p_e12=e1v, p_e3=zfse3v, p_surf_crs=e1e3v_msk, psgn=-1.0 ) 
    168       !IF(narea==267)WRITE(narea+5000,*)"1 vn_crs(17,5,74) = ",vn_crs(17,5,74),vmask_crs(17,5,74),vn(46,13,74),vn(47,13,74),vn(48,13,74) 
    169169      vb_crs(:,:,:) = vb_crs(:,:,:)*vmask_crs(:,:,:) 
    170170      vn_crs(:,:,:) = vn_crs(:,:,:)*vmask_crs(:,:,:) 
    171       !IF(narea==267)WRITE(narea+5000,*)"2 vn_crs(17,5,74) = ",vn_crs(17,5,74),vmask_crs(17,5,74),vn(46,13,74),vn(47,13,74),vn(48,13,74) 
    172171      !                                                                                  
    173172      zt(:,:,:) = 0._wp     ;    zs(:,:,:) = 0._wp  ;   zt_crs(:,:,:) = 0._wp   ;    zs_crs(:,:,:) = 0._wp 
     
    209208                  ! 
    210209                  !cbr 
    211                   ! 
    212210                  !bug1: il manquait le facvol_t(ji,jj,jk) ds la division ; ca creait des grosses erreurs de Wcrs ( vu en recalculant la divergence 3D ) 
    213211                  !bug2: mm test que bug1: on n'obtient tjs pas zero 
     
    215213                  !exp (117,211,74) : e1*e2*e3=235206030060.005 / ocean_volume_crs_t * facvol = 235205585307.810 
    216214                  !                   e1*e2*e3-cean_volume_crs_t * facvol/(cean_volume_crs_t * facvol) ~1.e-6)   
    217                   !IF( ocean_volume_crs_t(ji,jj,jk) .NE. 0._wp ) hdivn_crs(ji,jj,jk) = ( z2dcrsu + z2dcrsv ) / (facvol_t(ji,jj,jk)*ocean_volume_crs_t(ji,jj,jk)) 
    218                   !IF( ocean_volume_crs_t(ji,jj,jk) .NE. 0._wp ) hdivn_crs(ji,jj,jk) = ( z2dcrsu + z2dcrsv ) / (e1t_crs(ji,jj)*e2t_crs(ji,jj)*e3t_crs(ji,jj,jk)) 
    219215                  IF( ocean_volume_crs_t(ji,jj,jk) .NE. 0._wp ) hdivn_crs(ji,jj,jk) = ( z2dcrsu + z2dcrsv ) 
    220216 
    221                !iji=117 ; ijj=211 
    222                !iji=iji-nimpp_crs+1 ; ijj=ijj-njmpp_crs+1 
    223                !IF( ji==iji .AND. jj==ijj )THEN 
    224                !WRITE(narea+5000,*)"hdivn_crs =======> " 
    225                !WRITE(narea+5000,*) "u"  ,jk,un_crs(ji  ,jj  ,jk) ,e2e3u_msk(ji  ,jj  ,jk),un_crs(ji  ,jj  ,jk)*e2e3u_msk(ji  ,jj  ,jk) 
    226                !WRITE(narea+5000,*) "um1",jk,un_crs(ji-1,jj  ,jk) , e2e3u_msk(ji-1,jj  ,jk),un_crs(ji-1,jj  ,jk) * e2e3u_msk(ji-1,jj  ,jk) 
    227                !WRITE(narea+5000,*) "v",jk,vn_crs(ji  ,jj  ,jk) , e1e3v_msk(ji  ,jj  ,jk),vn_crs(ji  ,jj  ,jk) * e1e3v_msk(ji  ,jj  ,jk) 
    228                !WRITE(narea+5000,*) "vm1",jk,vn_crs(ji  ,jj-1,jk) , e1e3v_msk(ji  ,jj-1,jk),vn_crs(ji  ,jj-1,jk) * e1e3v_msk(ji  ,jj-1,jk) 
    229                !WRITE(narea+5000,*) "t1 ",jk,z2dcrsu,z2dcrsv, z2dcrsu + z2dcrsv,hdivn_crs(ji,jj,jk) 
    230                !WRITE(narea+5000,*) "t2 ",jk,e1t_crs(ji,jj),e2t_crs(ji,jj),e3t_crs(ji,jj,jk),e1t_crs(ji,jj)*e2t_crs(ji,jj)*e3t_crs(ji,jj,jk) 
    231                !WRITE(narea+5000,*) "t3 ",jk,ocean_volume_crs_t(ji,jj,jk),facvol_t(ji,jj,jk),facvol_t(ji,jj,jk)*ocean_volume_crs_t(ji,jj,jk) 
    232                !WRITE(narea+5000,*) "t4 ",jk, ( z2dcrsu + z2dcrsv ) / (facvol_t(ji,jj,jk)*ocean_volume_crs_t(ji,jj,jk)) 
    233                !WRITE(narea+5000,*) "t5 ",jk, ( z2dcrsu + z2dcrsv ) / (e1t_crs(ji,jj)*e2t_crs(ji,jj)*e3t_crs(ji,jj,jk)) 
    234                !ENDIF 
    235  
    236  
    237                   !IF( crs_volt_wgt(ji,jj,jk) .NE. 0._wp ) hdivn_crs(ji,jj,jk) = ( z2dcrsu + z2dcrsv ) / crs_volt_wgt(ji,jj,jk) 
    238217                  z2dcrsu =  ( ub_crs(ji  ,jj  ,jk) * e2e3u_msk(ji  ,jj  ,jk) ) & 
    239218                     &     - ( ub_crs(ji-1,jj  ,jk) * e2e3u_msk(ji-1,jj  ,jk) ) 
     
    251230 
    252231 
    253       ! DO jk = 1, jpkm1          ! Interior value 
    254       !      DO jj = 1, jpj_crs 
    255       !         DO ji = 1, jpi_crs 
    256       !            IF( e3t_crs(ji,jj,jk) .NE. e3t_crs(ji,jj,jk) )WRITE(narea+200,*)"e3t_crs",e3t_crs(ji,jj,jk) ; call flush(narea+200) 
    257       !            IF( hdivn_crs(ji,jj,jk) .NE. hdivn_crs(ji,jj,jk) )WRITE(narea+200,*)"hdivn_crs",hdivn_crs(ji,jj,jk) ; call flush(narea+200) 
    258       !         END DO 
    259       !      END DO 
    260       !   END DO 
    261  
    262232      !  W-velocity 
    263233      IF( ln_crs_wn ) THEN 
     
    266236        wn_crs(:,:,jpk) = 0._wp 
    267237        DO jk = jpkm1, 1, -1 
    268            !cbr wn_crs(:,:,jk) = wn_crs(:,:,jk+1) - e3t_crs(:,:,jk) * hdivn_crs(:,:,jk) 
    269238           wn_crs(:,:,jk) = e1e2w_msk(:,:,jk+1)*wn_crs(:,:,jk+1) - hdivn_crs(:,:,jk) 
    270239           WHERE( e1e2w_msk(:,:,jk) .NE. 0._wp )  wn_crs(:,:,jk) =  wn_crs(:,:,jk) /e1e2w_msk(:,:,jk)  
     
    286255      ! 
    287256      CALL iom_put( "avt", avt_crs )   !  Kz 
    288        
     257      
     258      !deja dasn step CALL zdf_mxl_crs(kt) 
     259 
     260  
    289261      !  sbc fields   
    290262 
     
    303275      CALL crs_dom_ope( fr_i , 'SUM', 'T', tmask, fr_i_crs , p_e12=e1e2t, p_surf_crs=e1e2t_crs, psgn=1.0 ) 
    304276 
     277      z2d=REAL(nmln,wp) 
     278      CALL crs_dom_ope( z2d , 'MAX', 'T', tmask, z2d_crs , p_e12=e1e2t, p_surf_crs=e1e2t_crs, psgn=1.0 ) 
     279      nmln_crs=INT(z2d_crs)  
     280      nmln_crs=MAX(nlb10,nmln_crs)     
     281 
    305282      CALL iom_put( "ssh"      , sshn_crs )   ! ssh output  
    306283      CALL iom_put( "utau"     , utau_crs )   ! i-tau output  
     
    313290      CALL iom_put( "ice_cover", fr_i_crs )   ! ice cover output  
    314291 
    315       !cbr 
    316       !IF(narea==267)WRITE(narea+5000,*)"vn_crs(17,5,74) = ",vn_crs(17,5,74) 
    317       !ji=117 ; jj=211 ; jk=74 
    318       !ji=ji-nimpp_crs+1 ; jj=jj-njmpp_crs+1 
    319       !IF( ji .GE. 2 .AND. ji .LE. jpi_crs-1 .AND. jj .GE. 2 .AND. jj .LE. jpj_crs-1 )THEN 
    320       !WRITE(narea+5000,*)"=======> kt ",kt 
    321       !WRITE(narea+5000,*)ji,jj,glamt(ji,jj),gphit(ji,jj) 
    322       !WRITE(narea+5000,*)"um1  crs ",umask_crs(ji-1,jj,jk),e2e3u_msk(ji-1,jj,jk),un_crs(ji-1,jj,jk),umask_crs(ji-1,jj,jk)*e2e3u_msk(ji-1,jj,jk)*un_crs(ji-1,jj,jk) 
    323       !WRITE(narea+5000,*)"u    crs ",umask_crs(ji,jj,jk),e2e3u_msk(ji,jj,jk),un_crs(ji,jj,jk),umask_crs(ji,jj,jk)*e2e3u_msk(ji,jj,jk)*un_crs(ji,jj,jk) 
    324       !WRITE(narea+5000,*)"vm1  crs ",vmask_crs(ji,jj-1,jk),e1e3v_msk(ji,jj-1,jk),vn_crs(ji,jj-1,jk),vmask_crs(ji,jj-1,jk)*e1e3v_msk(ji,jj-1,jk)*vn_crs(ji,jj-1,jk) 
    325       !WRITE(narea+5000,*)"v    crs ",vmask_crs(ji,jj,jk),e1e3v_msk(ji,jj,jk),vn_crs(ji,jj,jk),vmask_crs(ji,jj,jk)*e1e3v_msk(ji,jj,jk)*vn_crs(ji,jj,jk) 
    326       !WRITE(narea+5000,*)"wp1  crs ",tmask_crs(ji,jj,jk+1),e1e2w_msk(ji,jj,jk+1),wn_crs(ji,jj,jk+1),tmask_crs(ji,jj,jk+1)*e1e2w_msk(ji,jj,jk+1)*wn_crs(ji,jj,jk+1) 
    327       !WRITE(narea+5000,*)"w    crs ",tmask_crs(ji,jj,jk),e1e2w_msk(ji,jj,jk),wn_crs(ji,jj,jk),tmask_crs(ji,jj,jk)*e1e2w_msk(ji,jj,jk)*wn_crs(ji,jj,jk) 
    328       !z = umask_crs(ji,jj,jk)*e2e3u_msk(ji,jj,jk)*un_crs(ji,jj,jk) - umask_crs(ji-1,jj,jk)*e2e3u_msk(ji-1,jj,jk)*un_crs(ji-1,jj,jk) + & 
    329       !    vmask_crs(ji,jj,jk)*e1e3v_msk(ji,jj,jk)*vn_crs(ji,jj,jk) - vmask_crs(ji,jj-1,jk)*e1e3v_msk(ji,jj-1,jk)*vn_crs(ji,jj-1,jk) + & 
    330       !    tmask_crs(ji,jj,jk)*e1e2w_msk(ji,jj,jk)*wn_crs(ji,jj,jk) - tmask_crs(ji,jj,jk+1)*e1e2w_msk(ji,jj,jk+1)*wn_crs(ji,jj,jk+1) 
    331       !WRITE(narea+5000,*)"sum ",z 
    332       !ijie = mie_crs(ji) 
    333       !ijis = mis_crs(ji) 
    334       !ijje = mje_crs(jj) 
    335       !ijjs = mjs_crs(jj) 
    336       !DO i=ijis,ijie 
    337       !   DO j=ijjs,ijje 
    338       !       WRITE(narea+5000,*)"tmask",i,j,tmask(i,j,jk) 
    339       !   ENDDO            
    340       !ENDDO            
    341  
    342       !z=0._wp 
    343       !zsm=0._wp 
    344       !DO i=ijis,ijie 
    345       !   DO j=ijjs,ijje 
    346       !       WRITE(narea+5000,*)"w",i,j,tmask(i,j,jk),e1t(i,j),e2t(i,j),e1t(i,j)*e2t(i,j),wn(i,j,jk) 
    347       !       z=z+tmask(i,j,jk)*e1t(i,j)*e2t(i,j)*wn(i,j,jk) 
    348       !       zsm=zsm+tmask(i,j,jk)*e1t(i,j)*e2t(i,j) 
    349       !   ENDDO            
    350       !ENDDO    
    351          
    352       !zw=z 
    353       !WRITE(narea+5000,*)"w sum ",zsm,zw            
    354       !z=0._wp 
    355       !zsm=0._wp 
    356       !DO i=ijis,ijie 
    357       !   DO j=ijjs,ijje 
    358       !       WRITE(narea+5000,*)"wp1 ",i,j,tmask(i,j,jk+1),e1t(i,j),e2t(i,j),e1t(i,j)*e2t(i,j),wn(i,j,jk+1) 
    359       !       z=z+tmask(i,j,jk+1)*e1t(i,j)*e2t(i,j)*wn(i,j,jk+1) 
    360       !       zsm=zsm+tmask(i,j,jk+1)*e1t(i,j)*e2t(i,j) 
    361       !   ENDDO 
    362       !ENDDO 
    363       !zwp1=z 
    364       !WRITE(narea+5000,*)"wp1 sum ",zsm,zwp1   
    365       !z=0._wp 
    366       !zsm=0._wp 
    367       !i=ijis-1 
    368       !DO j=ijjs,ijje 
    369       !    WRITE(narea+5000,*)"um1",i,j,umask(i,j,jk),e2u(i,j),e3u_0(i,j,jk),e2u(i,j)*e3u_0(i,j,jk),un(i,j,jk) 
    370       !    z=z+e2u(i,j)*e3u_0(i,j,jk)*un(i,j,jk) 
    371       !    zsm=zsm+e2u(i,j)*e3u_0(i,j,jk)*umask(i,j,jk) 
    372       !ENDDO 
    373       !zum1=z 
    374       !WRITE(narea+5000,*)"um1 sum ",zsm,zum1           
    375       !z=0._wp 
    376       !zsm=0._wp 
    377       !i=ijie 
    378       !DO j=ijjs,ijje 
    379       !    WRITE(narea+5000,*)"u",i,j,umask(i,j,jk),e2u(i,j),e3u_0(i,j,jk),e2u(i,j)*e3u_0(i,j,jk),un(i,j,jk) 
    380       !    z=z+e2u(i,j)*e3u_0(i,j,jk)*un(i,j,jk) 
    381       !    zsm=zsm+e2u(i,j)*e3u_0(i,j,jk)*umask(i,j,jk) 
    382       !ENDDO            
    383       !zu=z 
    384       !WRITE(narea+5000,*)"u   sum ",zsm,zu           
    385       !z=0._wp 
    386       !zsm=0._wp 
    387       !j=ijjs-1 
    388       !DO i=ijis,ijie 
    389       !    WRITE(narea+5000,*)"vm1",i,j,vmask(i,j,jk),e1v(i,j),e3v_0(i,j,jk),e1v(i,j)*e3v_0(i,j,jk),vn(i,j,jk) 
    390       !    z=z+e1v(i,j)*e3v_0(i,j,jk)*vn(i,j,jk) 
    391       !    zsm=zsm+e1v(i,j)*e3v_0(i,j,jk)*vmask(i,j,jk) 
    392       !ENDDO            
    393       !zvm1=z 
    394       !WRITE(narea+5000,*)"vm1 sum ",zsm,zvm1            
    395       !z=0._wp 
    396       !zsm=0._wp 
    397       !j=ijje 
    398       !DO i=ijis,ijie 
    399       !    WRITE(narea+5000,*)"v",i,j,vmask(i,j,jk),e1v(i,j),e3v_0(i,j,jk),e1v(i,j)*e3v_0(i,j,jk),vn(i,j,jk) 
    400       !    z=z+e1v(i,j)*e3v_0(i,j,jk)*vn(i,j,jk) 
    401       !    zsm=zsm+e1v(i,j)*e3v_0(i,j,jk)*vmask(i,j,jk) 
    402       !ENDDO            
    403       !zv=z 
    404       !WRITE(narea+5000,*)"v   sum ",zv            
    405       !WRITE(narea+5000,*)"sum ",zw+zwp1+zum1+zu+zvm1+zv 
    406       !DO i=ijis,ijie 
    407       !   DO j=ijjs,ijje 
    408       !       WRITE(narea+5000,*)"msk",i,j,tmask(i,j,jk),umask(i,j,jk),vmask(i,j,jk) 
    409       !       WRITE(narea+5000,*)"vel",i,j,un(i,j,jk),vn(i,j,jk),wn(i,j,jk) 
    410       !   ENDDO 
    411       !ENDDO 
    412  
    413       !DO i=ijis,ijie 
    414       !   DO j=ijjs,ijje 
    415       !      z = un(i,j,jk)*e2u(i,j)*e3u_0(i,j,jk)*umask(i,j,jk) - un(i-1,j,jk)*e2u(i-1,j)*e3u_0(i-1,j,jk)*umask(i-1,j,jk) + & 
    416       !          vn(i,j,jk)*e1v(i,j)*e3v_0(i,j,jk)*vmask(i,j,jk) - vn(i,j-1,jk)*e1v(i,j-1)*e3v_0(i,j-1,jk)*vmask(i,j-1,jk) + & 
    417       !          wn(i,j,jk)*e2t(i,j)*e1t(i,j)*tmask(i,j,jk)     - wn(i,j,jk+1)*e2t(i,j)*e1t(i,j)*tmask(i,j,jk+1) 
    418       !       WRITE(narea+5000,*)"div ",i,j,jk,z 
    419       !   ENDDO 
    420       !ENDDO 
    421  
    422       !ENDIF 
    423        
    424    
    425  
    426292      !  free memory 
    427293      CALL wrk_dealloc( jpi, jpj, jpk, zfse3t, zfse3w ) 
    428294      CALL wrk_dealloc( jpi, jpj, jpk, zfse3u, zfse3v ) 
    429       CALL wrk_dealloc( jpi, jpj, jpk, zt, zs       ) 
     295      CALL wrk_dealloc( jpi, jpj, jpk, zt, zs         ) 
     296      CALL wrk_dealloc( jpi, jpj, z2d                 ) 
    430297      CALL wrk_dealloc( jpi_crs, jpj_crs, jpk, zt_crs, zs_crs ) 
     298      CALL wrk_dealloc( jpi_crs, jpj_crs, z2d_crs     ) 
    431299      ! 
    432300      CALL iom_swap( "nemo" )     ! return back on high-resolution grid 
Note: See TracChangeset for help on using the changeset viewer.