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 2715 for trunk/NEMOGCM/NEMO/NST_SRC/agrif_opa_update.F90 – NEMO

Ignore:
Timestamp:
2011-03-30T17:58:35+02:00 (13 years ago)
Author:
rblod
Message:

First attempt to put dynamic allocation on the trunk

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/NEMOGCM/NEMO/NST_SRC/agrif_opa_update.F90

    r2528 r2715  
    77   USE dom_oce 
    88   USE agrif_oce 
     9   USE in_out_manager  ! I/O manager 
     10   USE lib_mpp 
    911 
    1012   IMPLICIT NONE 
     
    2729      !!   *** ROUTINE Agrif_Update_Tra *** 
    2830      !!--------------------------------------------- 
     31      USE wrk_nemo, ONLY: wrk_in_use, wrk_not_released 
     32      USE wrk_nemo, ONLY: wrk_3d_1 
     33      !! 
    2934      INTEGER, INTENT(in) :: kt 
    30  
    31       REAL :: ztab(jpi,jpj,jpk) 
    32  
     35      REAL(wp), POINTER, DIMENSION(:,:,:) :: ztab 
     36 
     37        
    3338      IF((Agrif_NbStepint() .NE. (Agrif_irhot()-1)).AND.(kt /= 0)) RETURN 
    3439#if defined TWO_WAY 
     40      ztab => wrk_3d_1 
     41      IF( wrk_in_use(3, 1) ) THEN 
     42         CALL ctl_stop('agrif_update_tra: ERROR: requested workspace arrays unavailable') 
     43         RETURN 
     44      END IF 
     45 
    3546      Agrif_UseSpecialValueInUpdate = .TRUE. 
    3647      Agrif_SpecialValueFineGrid = 0. 
    3748 
    3849      IF (MOD(nbcline,nbclineupdate) == 0) THEN 
    39          CALL Agrif_Update_Variable(ztab,tn, procname=updateT) 
    40          CALL Agrif_Update_Variable(ztab,sn, procname=updateS) 
    41       ELSE 
    42          CALL Agrif_Update_Variable(ztab,tn,locupdate=(/0,2/), procname=updateT) 
    43          CALL Agrif_Update_Variable(ztab,sn,locupdate=(/0,2/), procname=updateS) 
     50         CALL Agrif_Update_Variable(ztab,tn_id, procname=updateT) 
     51         CALL Agrif_Update_Variable(ztab,sn_id, procname=updateS) 
     52      ELSE 
     53         CALL Agrif_Update_Variable(ztab,tn_id,locupdate=(/0,2/), procname=updateT) 
     54         CALL Agrif_Update_Variable(ztab,sn_id,locupdate=(/0,2/), procname=updateS) 
    4455      ENDIF 
    4556 
    4657      Agrif_UseSpecialValueInUpdate = .FALSE. 
     58 
     59      IF( wrk_not_released(3, 1) ) THEN 
     60         CALL ctl_stop('Agrif_Update_Tra: ERROR: failed to release workspace arrays') 
     61      END IF 
    4762#endif 
    4863 
     
    5368      !!   *** ROUTINE Agrif_Update_Dyn *** 
    5469      !!--------------------------------------------- 
     70      USE wrk_nemo, ONLY: wrk_in_use, wrk_not_released 
     71      USE wrk_nemo, ONLY: wrk_2d_1 
     72      USE wrk_nemo, ONLY: wrk_3d_1 
     73      !! 
    5574      INTEGER, INTENT(in) :: kt 
    56  
    57       REAL(wp), DIMENSION(jpi,jpj) :: ztab2d 
    58       REAL(wp), DIMENSION(jpi,jpj,jpk) :: ztab 
     75      REAL(wp), POINTER, DIMENSION(:,:) :: ztab2d 
     76      REAL(wp), POINTER, DIMENSION(:,:,:) :: ztab 
     77 
    5978 
    6079      IF ((Agrif_NbStepint() .NE. (Agrif_irhot()-1)).AND.(kt /= 0)) Return 
    6180#if defined TWO_WAY 
     81      ztab => wrk_3d_1 ; ztab2d => wrk_2d_1 
     82      IF( ( wrk_in_use(2, 1)) .OR.  wrk_in_use(3, 1) )THEN 
     83         CALL ctl_stop('agrif_update_dyn: ERROR: requested workspace arrays unavailable') 
     84         RETURN 
     85      END IF 
    6286 
    6387      IF (mod(nbcline,nbclineupdate) == 0) THEN 
    64          CALL Agrif_Update_Variable(ztab,un,procname = updateU) 
    65          CALL Agrif_Update_Variable(ztab,vn,procname = updateV) 
    66       ELSE 
    67          CALL Agrif_Update_Variable(ztab,un,locupdate=(/0,1/),procname = updateU) 
    68          CALL Agrif_Update_Variable(ztab,vn,locupdate=(/0,1/),procname = updateV)          
    69       ENDIF 
    70  
    71       CALL Agrif_Update_Variable(ztab2d,e1u,procname = updateU2d) 
    72       CALL Agrif_Update_Variable(ztab2d,e2v,procname = updateV2d)   
     88         CALL Agrif_Update_Variable(ztab,un_id,procname = updateU) 
     89         CALL Agrif_Update_Variable(ztab,vn_id,procname = updateV) 
     90      ELSE 
     91         CALL Agrif_Update_Variable(ztab,un_id,locupdate=(/0,1/),procname = updateU) 
     92         CALL Agrif_Update_Variable(ztab,vn_id,locupdate=(/0,1/),procname = updateV)          
     93      ENDIF 
     94 
     95      CALL Agrif_Update_Variable(ztab2d,e1u_id,procname = updateU2d) 
     96      CALL Agrif_Update_Variable(ztab2d,e2v_id,procname = updateV2d)   
    7397 
    7498      nbcline = nbcline + 1 
     
    76100      Agrif_UseSpecialValueInUpdate = ln_spc_dyn 
    77101      Agrif_SpecialValueFineGrid = 0. 
    78       CALL Agrif_Update_Variable(ztab2d,sshn,procname = updateSSH) 
     102      CALL Agrif_Update_Variable(ztab2d,sshn_id,procname = updateSSH) 
    79103      Agrif_UseSpecialValueInUpdate = .FALSE. 
    80104 
     105      IF( wrk_not_released(2, 1) .OR. wrk_not_released(3, 1) )THEN 
     106         CALL ctl_stop('agrif_update_dyn: ERROR: failed to release workspace arrays') 
     107      END IF 
    81108 
    82109!Done in step 
     
    184211               DO ji=i1,i2 
    185212                  tabres(ji,jj,jk) = e2u(ji,jj) * un(ji,jj,jk) 
     213                  tabres(ji,jj,jk) = tabres(ji,jj,jk) * fse3u(ji,jj,jk) 
    186214               END DO 
    187215            END DO 
Note: See TracChangeset for help on using the changeset viewer.