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 3294 for trunk/NEMOGCM/NEMO/OPA_SRC/TRD/trdmld.F90 – NEMO

Ignore:
Timestamp:
2012-01-28T17:44:18+01:00 (12 years ago)
Author:
rblod
Message:

Merge of 3.4beta into the trunk

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/NEMOGCM/NEMO/OPA_SRC/TRD/trdmld.F90

    r2715 r3294  
    3838   USE restart         ! for lrst_oce 
    3939   USE lib_mpp         ! MPP library 
     40   USE wrk_nemo        ! Memory allocation 
    4041 
    4142   IMPLICIT NONE 
     
    9394      !!            surface and the control surface is called "mixed-layer" 
    9495      !!---------------------------------------------------------------------- 
    95       USE wrk_nemo, ONLY:   wrk_in_use, wrk_not_released 
    96       USE wrk_nemo, ONLY:   zvlmsk => wrk_2d_10     ! 2D workspace 
    9796      ! 
    9897      INTEGER                         , INTENT( in ) ::   ktrd       ! ocean trend index 
     
    102101      ! 
    103102      INTEGER ::   ji, jj, jk, isum 
    104       !!---------------------------------------------------------------------- 
    105  
    106       IF( wrk_in_use(2, 10) ) THEN 
    107          CALL ctl_stop('trd_mld_zint : requested workspace arrays unavailable')   ;   RETURN 
    108       ENDIF 
     103      REAL(wp), POINTER, DIMENSION(:,:)  :: zvlmsk  
     104      !!---------------------------------------------------------------------- 
     105 
     106      CALL wrk_alloc( jpi, jpj, zvlmsk )  
    109107 
    110108      ! I. Definition of control surface and associated fields 
     
    195193      END SELECT 
    196194      ! 
    197       IF( wrk_not_released(2, 10) )   CALL ctl_stop('trd_mld_zint: failed to release workspace arrays') 
     195      CALL wrk_dealloc( jpi, jpj, zvlmsk )  
    198196      ! 
    199197   END SUBROUTINE trd_mld_zint 
     
    247245      !!       - See NEMO documentation (in preparation) 
    248246      !!---------------------------------------------------------------------- 
    249       USE wrk_nemo, ONLY: wrk_in_use, wrk_not_released 
    250       USE wrk_nemo, ONLY: ztmltot => wrk_2d_1,  zsmltot => wrk_2d_2 ! dT/dt over the anlysis window (including Asselin) 
    251       USE wrk_nemo, ONLY: ztmlres => wrk_2d_3,  zsmlres => wrk_2d_4 ! residual = dh/dt entrainment term 
    252       USE wrk_nemo, ONLY: ztmlatf => wrk_2d_5,  zsmlatf => wrk_2d_6 ! needed for storage only 
    253       USE wrk_nemo, ONLY: ztmltot2 => wrk_2d_7, ztmlres2 => wrk_2d_8, ztmltrdm2 => wrk_2d_9    ! \  working arrays to diagnose the trends 
    254       USE wrk_nemo, ONLY: zsmltot2 => wrk_2d_10, zsmlres2 => wrk_2d_11, zsmltrdm2 => wrk_2d_12 !  > associated with the time meaned ML T & S 
    255       USE wrk_nemo, ONLY: ztmlatf2 => wrk_2d_13, zsmlatf2 => wrk_2d_14     
    256       USE wrk_nemo, ONLY: wrk_3d_1, wrk_3d_2                     ! / 
    257247      ! 
    258248      INTEGER, INTENT( in ) ::   kt   ! ocean time-step index 
     
    261251      LOGICAL :: lldebug = .TRUE. 
    262252      REAL(wp) :: zavt, zfn, zfn2 
     253      !                                              ! z(ts)mltot : dT/dt over the anlysis window (including Asselin) 
     254      !                                              ! z(ts)mlres : residual = dh/dt entrainment term 
     255      REAL(wp), POINTER, DIMENSION(:,:  ) ::  ztmltot , zsmltot , ztmlres , zsmlres , ztmlatf , zsmlatf 
     256      REAL(wp), POINTER, DIMENSION(:,:  ) ::  ztmltot2, zsmltot2, ztmlres2, zsmlres2, ztmlatf2, zsmlatf2, ztmltrdm2, zsmltrdm2   
    263257      REAL(wp), POINTER, DIMENSION(:,:,:) ::  ztmltrd2, zsmltrd2   ! only needed for mean diagnostics 
    264258#if defined key_dimgout 
     
    267261#endif 
    268262      !!---------------------------------------------------------------------- 
    269        
    270       ! Check that the workspace arrays are all OK to be used 
    271       IF( wrk_in_use(2, 1,2,3,4,5,6,7,8,9,10,11,12,13,14)  .OR. & 
    272           wrk_in_use(3, 1,2)                                 ) THEN 
    273          CALL ctl_stop('trd_mld : requested workspace arrays unavailable')   ;   RETURN 
    274       ELSE IF(jpltrd > jpk) THEN 
    275          ! ARPDBG, is this reasonable or will this cause trouble in the future? 
    276          CALL ctl_stop('trd_mld : no. of mixed-layer trends (jpltrd) exceeds no. of model levels so cannot use 3D workspaces.') 
    277          RETURN          
    278       END IF 
    279       ! Set-up pointers into sub-arrays of 3d-workspaces 
    280       ztmltrd2 => wrk_3d_1(1:,:,1:jpltrd) 
    281       zsmltrd2 => wrk_3d_2(1:,:,1:jpltrd) 
     263   
     264      CALL wrk_alloc( jpi, jpj,         ztmltot , zsmltot , ztmlres , zsmlres , ztmlatf , zsmlatf                        ) 
     265      CALL wrk_alloc( jpi, jpj,         ztmltot2, zsmltot2, ztmlres2, zsmlres2, ztmlatf2, zsmlatf2, ztmltrdm2, zsmltrdm2 )   
     266      CALL wrk_alloc( jpi, jpj, jpltrd, ztmltrd2, zsmltrd2                                                               ) 
    282267 
    283268      ! ====================================================================== 
     
    293278               zavt = avt(ji,jj,ik) 
    294279               tmltrd(ji,jj,jpmld_zdf) = - zavt / fse3w(ji,jj,ik) * tmask(ji,jj,ik)  & 
    295                   &                      * ( tn(ji,jj,ik-1) - tn(ji,jj,ik) )         & 
     280                  &                      * ( tsn(ji,jj,ik-1,jp_tem) - tsn(ji,jj,ik,jp_tem) )         & 
    296281                  &                      / MAX( 1., rmld(ji,jj) ) * tmask(ji,jj,1) 
    297282               zavt = fsavs(ji,jj,ik) 
    298283               smltrd(ji,jj,jpmld_zdf) = - zavt / fse3w(ji,jj,ik) * tmask(ji,jj,ik)  & 
    299                   &                      * ( sn(ji,jj,ik-1) - sn(ji,jj,ik) )         & 
     284                  &                      * ( tsn(ji,jj,ik-1,jp_sal) - tsn(ji,jj,ik,jp_sal) )         & 
    300285                  &                      / MAX( 1., rmld(ji,jj) ) * tmask(ji,jj,1) 
    301286            END DO 
     
    334319      tml(:,:) = 0.e0   ;   sml(:,:) = 0.e0 
    335320      DO jk = 1, jpktrd - 1 
    336          tml(:,:) = tml(:,:) + wkx(:,:,jk) * tn(:,:,jk) 
    337          sml(:,:) = sml(:,:) + wkx(:,:,jk) * sn(:,:,jk)  
     321         tml(:,:) = tml(:,:) + wkx(:,:,jk) * tsn(:,:,jk,jp_tem) 
     322         sml(:,:) = sml(:,:) + wkx(:,:,jk) * tsn(:,:,jk,jp_sal) 
    338323      END DO 
    339324 
     
    740725      IF( lrst_oce )   CALL trd_mld_rst_write( kt )  
    741726 
    742       IF( wrk_not_released(2, 1,2,3,4,5,6,7,8,9,10,11,12,13,14)  .OR. & 
    743           wrk_not_released(3, 1,2)                                )   & 
    744           CALL ctl_stop('trd_mld : failed to release workspace arrays.') 
     727      CALL wrk_dealloc( jpi, jpj,         ztmltot , zsmltot , ztmlres , zsmlres , ztmlatf , zsmlatf                        ) 
     728      CALL wrk_dealloc( jpi, jpj,         ztmltot2, zsmltot2, ztmlres2, zsmlres2, ztmlatf2, zsmlatf2, ztmltrdm2, zsmltrdm2 )   
     729      CALL wrk_dealloc( jpi, jpj, jpltrd, ztmltrd2, zsmltrd2                                                               ) 
    745730      ! 
    746731   END SUBROUTINE trd_mld 
Note: See TracChangeset for help on using the changeset viewer.