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 2623 for branches/dev_r2586_dynamic_mem/NEMOGCM/NEMO/OPA_SRC/TRA/traadv.F90 – NEMO

Ignore:
Timestamp:
2011-02-27T13:45:53+01:00 (13 years ago)
Author:
gm
Message:

dynamic mem: #785 ; TRA: move dyn allocation from nemogcm to module when possible (continuation)

File:
1 edited

Legend:

Unmodified
Added
Removed
  • branches/dev_r2586_dynamic_mem/NEMOGCM/NEMO/OPA_SRC/TRA/traadv.F90

    r2590 r2623  
    3232   PUBLIC   tra_adv        ! routine called by step module 
    3333   PUBLIC   tra_adv_init   ! routine called by opa module 
    34    PUBLIC   tra_adv_alloc  ! routine called by nemogcm module 
    3534 
    3635   !                                        !!* Namelist namtra_adv * 
     
    4443   INTEGER ::   nadv   ! choice of the type of advection scheme 
    4544 
    46    REAL(wp), SAVE, ALLOCATABLE, DIMENSION(:) ::   r2dt   ! vertical profile time-step, = 2 rdttra except at nit000 (=rdttra) if neuler=0 
    47  
    4845   !! * Substitutions 
    4946#  include "domzgr_substitute.h90" 
     
    5552   !!---------------------------------------------------------------------- 
    5653CONTAINS 
    57  
    58    FUNCTION tra_adv_alloc() 
    59       !!---------------------------------------------------------------------- 
    60       !!                ***  ROUTINE tra_adv_alloc  *** 
    61       !!---------------------------------------------------------------------- 
    62       IMPLICIT none 
    63       INTEGER tra_adv_alloc 
    64       !!---------------------------------------------------------------------- 
    65  
    66       ALLOCATE( r2dt(jpk), Stat=tra_adv_alloc) 
    67  
    68       IF(tra_adv_alloc /= 0)THEN 
    69          CALL ctl_warn('tra_adv_alloc: failed to allocate array.') 
    70       END IF 
    71  
    72    END FUNCTION tra_adv_alloc 
    7354 
    7455   SUBROUTINE tra_adv( kt ) 
     
    8061      !! ** Method  : - Update (ua,va) with the advection term following nadv 
    8162      !!---------------------------------------------------------------------- 
    82       USE wrk_nemo, ONLY: wrk_use, wrk_release 
    83       USE wrk_nemo, ONLY: zun => wrk_3d_1, zvn => wrk_3d_2, zwn => wrk_3d_3 
     63      USE wrk_nemo, ONLY:   wrk_use, wrk_release 
     64      USE wrk_nemo, ONLY:   zun => wrk_3d_1, zvn => wrk_3d_2, zwn => wrk_3d_3   ! 3D workspace 
     65      ! 
    8466      INTEGER, INTENT( in ) ::   kt   ! ocean time-step index 
    8567      ! 
     
    8769      !!---------------------------------------------------------------------- 
    8870      ! 
    89       IF(.not. wrk_use(3,1,2,3))THEN 
    90          CALL ctl_stop('tra_adv: ERROR: requested workspace arrays unavailable') 
    91          RETURN 
     71      IF(.not. wrk_use(3, 1,2,3) ) THEN 
     72         CALL ctl_stop('tra_adv: requested workspace arrays unavailable')   ;   RETURN 
    9273      END IF 
    9374      !                                          ! set time step 
    9475      IF( neuler == 0 .AND. kt == nit000 ) THEN     ! at nit000 
    95          r2dt(:) =  rdttra(:)                          ! = rdtra (restarting with Euler time stepping) 
     76         r2dtra(:) =  rdttra(:)                          ! = rdtra (restarting with Euler time stepping) 
    9677      ELSEIF( kt <= nit000 + 1) THEN                ! at nit000 or nit000+1 
    97          r2dt(:) = 2. * rdttra(:)                      ! = 2 rdttra (leapfrog) 
     78         r2dtra(:) = 2._wp * rdttra(:)                   ! = 2 rdttra (leapfrog) 
    9879      ENDIF 
    9980      ! 
     
    11899 
    119100      SELECT CASE ( nadv )                            !==  compute advection trend and add it to general trend  ==! 
    120       CASE ( 1 )   ;    CALL tra_adv_cen2  ( kt, 'TRA',       zun, zvn, zwn, tsb, tsn, tsa, jpts )   !  2nd order centered 
    121       CASE ( 2 )   ;    CALL tra_adv_tvd   ( kt, 'TRA', r2dt, zun, zvn, zwn, tsb, tsn, tsa, jpts )   !  TVD  
    122       CASE ( 3 )   ;    CALL tra_adv_muscl ( kt, 'TRA', r2dt, zun, zvn, zwn, tsb,      tsa, jpts )   !  MUSCL  
    123       CASE ( 4 )   ;    CALL tra_adv_muscl2( kt, 'TRA', r2dt, zun, zvn, zwn, tsb, tsn, tsa, jpts )   !  MUSCL2  
    124       CASE ( 5 )   ;    CALL tra_adv_ubs   ( kt, 'TRA', r2dt, zun, zvn, zwn, tsb, tsn, tsa, jpts )   !  UBS  
    125       CASE ( 6 )   ;    CALL tra_adv_qck   ( kt, 'TRA', r2dt, zun, zvn, zwn, tsb, tsn, tsa, jpts )   !  QUICKEST  
     101      CASE ( 1 )   ;    CALL tra_adv_cen2  ( kt, 'TRA',         zun, zvn, zwn, tsb, tsn, tsa, jpts )   !  2nd order centered 
     102      CASE ( 2 )   ;    CALL tra_adv_tvd   ( kt, 'TRA', r2dtra, zun, zvn, zwn, tsb, tsn, tsa, jpts )   !  TVD  
     103      CASE ( 3 )   ;    CALL tra_adv_muscl ( kt, 'TRA', r2dtra, zun, zvn, zwn, tsb,      tsa, jpts )   !  MUSCL  
     104      CASE ( 4 )   ;    CALL tra_adv_muscl2( kt, 'TRA', r2dtra, zun, zvn, zwn, tsb, tsn, tsa, jpts )   !  MUSCL2  
     105      CASE ( 5 )   ;    CALL tra_adv_ubs   ( kt, 'TRA', r2dtra, zun, zvn, zwn, tsb, tsn, tsa, jpts )   !  UBS  
     106      CASE ( 6 )   ;    CALL tra_adv_qck   ( kt, 'TRA', r2dtra, zun, zvn, zwn, tsb, tsn, tsa, jpts )   !  QUICKEST  
    126107      ! 
    127108      CASE (-1 )                                      !==  esopa: test all possibility with control print  ==! 
    128          CALL tra_adv_cen2  ( kt, 'TRA',       zun, zvn, zwn, tsb, tsn, tsa, jpts )           
     109         CALL tra_adv_cen2  ( kt, 'TRA',         zun, zvn, zwn, tsb, tsn, tsa, jpts )           
    129110         CALL prt_ctl( tab3d_1=tsa(:,:,:,jp_tem), clinfo1=' adv0 - Ta: ', mask1=tmask,               & 
    130111            &          tab3d_2=tsa(:,:,:,jp_sal), clinfo2=       ' Sa: ', mask2=tmask, clinfo3='tra' ) 
    131          CALL tra_adv_tvd   ( kt, 'TRA', r2dt, zun, zvn, zwn, tsb, tsn, tsa, jpts )           
     112         CALL tra_adv_tvd   ( kt, 'TRA', r2dtra, zun, zvn, zwn, tsb, tsn, tsa, jpts )           
    132113         CALL prt_ctl( tab3d_1=tsa(:,:,:,jp_tem), clinfo1=' adv1 - Ta: ', mask1=tmask,               & 
    133114            &          tab3d_2=tsa(:,:,:,jp_sal), clinfo2=       ' Sa: ', mask2=tmask, clinfo3='tra' ) 
    134          CALL tra_adv_muscl ( kt, 'TRA', r2dt, zun, zvn, zwn, tsb,      tsa, jpts )           
     115         CALL tra_adv_muscl ( kt, 'TRA', r2dtra, zun, zvn, zwn, tsb,      tsa, jpts )           
    135116         CALL prt_ctl( tab3d_1=tsa(:,:,:,jp_tem), clinfo1=' adv3 - Ta: ', mask1=tmask,               & 
    136117            &          tab3d_2=tsa(:,:,:,jp_sal), clinfo2=       ' Sa: ', mask2=tmask, clinfo3='tra' ) 
    137          CALL tra_adv_muscl2( kt, 'TRA', r2dt, zun, zvn, zwn, tsb, tsn, tsa, jpts )           
     118         CALL tra_adv_muscl2( kt, 'TRA', r2dtra, zun, zvn, zwn, tsb, tsn, tsa, jpts )           
    138119         CALL prt_ctl( tab3d_1=tsa(:,:,:,jp_tem), clinfo1=' adv4 - Ta: ', mask1=tmask,               & 
    139120            &          tab3d_2=tsa(:,:,:,jp_sal), clinfo2=       ' Sa: ', mask2=tmask, clinfo3='tra' ) 
    140          CALL tra_adv_ubs   ( kt, 'TRA', r2dt, zun, zvn, zwn, tsb, tsn, tsa, jpts )           
     121         CALL tra_adv_ubs   ( kt, 'TRA', r2dtra, zun, zvn, zwn, tsb, tsn, tsa, jpts )           
    141122         CALL prt_ctl( tab3d_1=tsa(:,:,:,jp_tem), clinfo1=' adv5 - Ta: ', mask1=tmask,               & 
    142123            &          tab3d_2=tsa(:,:,:,jp_sal), clinfo2=       ' Sa: ', mask2=tmask, clinfo3='tra' ) 
    143          CALL tra_adv_qck   ( kt, 'TRA', r2dt, zun, zvn, zwn, tsb, tsn, tsa, jpts )           
     124         CALL tra_adv_qck   ( kt, 'TRA', r2dtra, zun, zvn, zwn, tsb, tsn, tsa, jpts )           
    144125         CALL prt_ctl( tab3d_1=tsa(:,:,:,jp_tem), clinfo1=' adv6 - Ta: ', mask1=tmask,               & 
    145126            &          tab3d_2=tsa(:,:,:,jp_sal), clinfo2=       ' Sa: ', mask2=tmask, clinfo3='tra' ) 
     
    150131         &                       tab3d_2=tsa(:,:,:,jp_sal), clinfo2=       ' Sa: ', mask2=tmask, clinfo3='tra' ) 
    151132      ! 
    152       IF(.not. wrk_release(3,1,2,3))THEN 
    153          CALL ctl_stop('tra_adv: ERROR: failed to release workspace arrays') 
    154          RETURN 
    155       END IF 
     133      IF(.not. wrk_release(3,1,2,3) )   CALL ctl_stop('tra_adv: failed to release workspace arrays') 
    156134      ! 
    157135   END SUBROUTINE tra_adv 
     
    172150      !!---------------------------------------------------------------------- 
    173151 
    174       REWIND ( numnam )               ! Read Namelist namtra_adv : tracer advection scheme 
    175       READ   ( numnam, namtra_adv ) 
     152      REWIND( numnam )                ! Read Namelist namtra_adv : tracer advection scheme 
     153      READ  ( numnam, namtra_adv ) 
    176154 
    177155      IF(lwp) THEN                    ! Namelist print 
Note: See TracChangeset for help on using the changeset viewer.