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/OPA_SRC/SBC/sbcblk_clio.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/OPA_SRC/SBC/sbcblk_clio.F90

    r2528 r2715  
    5252   INTEGER , PARAMETER ::   jp_tair = 6           ! index of 10m air temperature             (Kelvin) 
    5353   INTEGER , PARAMETER ::   jp_prec = 7           ! index of total precipitation (rain+snow) (Kg/m2/s) 
    54    TYPE(FLD), ALLOCATABLE, DIMENSION(:) ::   sf   ! structure of input fields (file informations, fields read) 
     54 
     55   TYPE(FLD),ALLOCATABLE,DIMENSION(:) :: sf  ! structure of input fields (file informations, fields read) 
    5556 
    5657   INTEGER, PARAMETER  ::   jpintsr = 24          ! number of time step between sunrise and sunset 
     
    7374      &         6.6, 6.1, 5.6, 5.5, 5.8, 5.8, 5.6, 5.6, 5.6, 5.6 / 
    7475   !! 
    75    REAL(wp), DIMENSION(jpi,jpj) ::   sbudyko      ! cloudiness effect on LW radiation 
    76    REAL(wp), DIMENSION(jpi,jpj) ::   stauc        ! cloud optical depth  
     76   REAL(wp), ALLOCATABLE, SAVE, DIMENSION(:,:) ::   sbudyko      ! cloudiness effect on LW radiation 
     77   REAL(wp), ALLOCATABLE, SAVE, DIMENSION(:,:) ::   stauc        ! cloud optical depth  
    7778    
    78    REAL(wp)  ::   zeps    = 1.e-20                ! constant values 
    79    REAL(wp)  ::   zeps0   = 1.e-13   
     79   REAL(wp) ::   eps20  = 1.e-20   ! constant values 
    8080    
    8181   !! * Substitutions 
    8282#  include "vectopt_loop_substitute.h90" 
    8383   !!---------------------------------------------------------------------- 
    84    !! NEMO/OPA 3.3 , NEMO Consortium (2010) 
     84   !! NEMO/OPA 4.0 , NEMO Consortium (2011) 
    8585   !! $Id$  
    8686   !! Software governed by the CeCILL licence     (NEMOGCM/NEMO_CeCILL.txt) 
     
    116116      !!              - emp, emps   evaporation minus precipitation 
    117117      !!---------------------------------------------------------------------- 
    118       INTEGER, INTENT( in  ) ::   kt   ! ocean time step 
    119       !! 
    120       INTEGER  ::   ifpr, jfpr         ! dummy indices 
    121       INTEGER  ::   ierror             ! return error code 
     118      INTEGER, INTENT(in) ::   kt   ! ocean time step 
     119      !! 
     120      INTEGER  ::   ifpr, jfpr   ! dummy indices 
     121      INTEGER  ::   ierr0, ierr1, ierr2, ierr3   ! return error code 
    122122      !! 
    123123      CHARACTER(len=100) ::  cn_dir                            !   Root directory for location of CLIO files 
     
    156156          
    157157         ! set sf structure 
    158          ALLOCATE( sf(jpfld), STAT=ierror ) 
    159          IF( ierror > 0 ) THEN 
    160             CALL ctl_stop( 'sbc_blk_clio: unable to allocate sf structure' )   ;   RETURN 
    161          ENDIF 
     158         ALLOCATE( sf(jpfld), STAT=ierr0 ) 
     159         IF( ierr0 > 0 )   CALL ctl_stop( 'STOP', 'sbc_blk_clio: unable to allocate sf structure' ) 
    162160         DO ifpr= 1, jpfld 
    163             ALLOCATE( sf(ifpr)%fnow(jpi,jpj,1) ) 
    164             IF( slf_i(ifpr)%ln_tint ) ALLOCATE( sf(ifpr)%fdta(jpi,jpj,1,2) ) 
    165          END DO 
     161            ALLOCATE( sf(ifpr)%fnow(jpi,jpj,1) , STAT=ierr1) 
     162            IF( slf_i(ifpr)%ln_tint ) ALLOCATE( sf(ifpr)%fdta(jpi,jpj,1,2) , STAT=ierr2 ) 
     163         END DO 
     164         IF( ierr1+ierr2 > 0 )   CALL ctl_stop( 'STOP', 'sbc_blk_clio: unable to allocate sf array structure' ) 
    166165         ! fill sf with slf_i and control print 
    167166         CALL fld_fill( sf, slf_i, cn_dir, 'sbc_blk_clio', 'flux formulation for ocean surface boundary condition', 'namsbc_clio' ) 
     167          
     168         ! allocate sbcblk clio arrays 
     169         ALLOCATE( sbudyko(jpi,jpj) , stauc(jpi,jpj), STAT=ierr3 ) 
     170         IF( ierr3 > 0 )   CALL ctl_stop( 'STOP', 'sbc_blk_clio: unable to allocate arrays' ) 
    168171         ! 
    169172      ENDIF 
     
    208211      !!  ** Nota    :   sf has to be a dummy argument for AGRIF on NEC 
    209212      !!---------------------------------------------------------------------- 
     213      USE wrk_nemo, ONLY: wrk_in_use, wrk_not_released 
     214      USE wrk_nemo, ONLY: zqlw => wrk_2d_1  ! long-wave heat flux over ocean 
     215      USE wrk_nemo, ONLY: zqla => wrk_2d_2  ! latent heat flux over ocean 
     216      USE wrk_nemo, ONLY: zqsb => wrk_2d_3  ! sensible heat flux over ocean 
     217      !! 
    210218      TYPE(fld), INTENT(in), DIMENSION(:)       ::   sf    ! input data 
    211219      REAL(wp) , INTENT(in), DIMENSION(jpi,jpj) ::   pst   ! surface temperature                      [Celcius] 
     
    223231      REAL(wp) ::   zrhoa, zev, zes, zeso, zqatm, zevsqr        !    -         - 
    224232      REAL(wp) ::   ztx2, zty2                                  !    -         - 
    225       !! 
    226       REAL(wp), DIMENSION(jpi,jpj) ::   zqlw        ! long-wave heat flux over ocean 
    227       REAL(wp), DIMENSION(jpi,jpj) ::   zqla        ! latent heat flux over ocean 
    228       REAL(wp), DIMENSION(jpi,jpj) ::   zqsb        ! sensible heat flux over ocean 
    229233      !!--------------------------------------------------------------------- 
    230234 
    231       zpatm = 101000.      ! atmospheric pressure  (assumed constant here) 
     235      IF( wrk_in_use(3, 1,2,3) ) THEN 
     236         CALL ctl_stop('blk_oce_clio: requested workspace arrays are unavailable')   ;   RETURN 
     237      ENDIF 
     238 
     239      zpatm = 101000._wp      ! atmospheric pressure  (assumed constant here) 
    232240 
    233241      !------------------------------------! 
     
    309317            zdeltaq = zqatm - zqsato 
    310318            ztvmoy  = ztatm * ( 1. + 2.2e-3 * ztatm * zqatm ) 
    311             zdenum  = MAX( sf(jp_wndm)%fnow(ji,jj,1) * sf(jp_wndm)%fnow(ji,jj,1) * ztvmoy, zeps ) 
     319            zdenum  = MAX( sf(jp_wndm)%fnow(ji,jj,1) * sf(jp_wndm)%fnow(ji,jj,1) * ztvmoy, eps20 ) 
    312320            zdtetar = zdteta / zdenum 
    313321            ztvmoyr = ztvmoy * ztvmoy * zdeltaq / zdenum 
     
    331339            zpsil   = zpsih 
    332340             
    333             zvatmg         = MAX( 0.032 * 1.5e-3 * sf(jp_wndm)%fnow(ji,jj,1) * sf(jp_wndm)%fnow(ji,jj,1) / grav, zeps ) 
     341            zvatmg         = MAX( 0.032 * 1.5e-3 * sf(jp_wndm)%fnow(ji,jj,1) * sf(jp_wndm)%fnow(ji,jj,1) / grav, eps20 ) 
    334342            zcmn           = vkarmn / LOG ( 10. / zvatmg ) 
    335343            zchn           = 0.0327 * zcmn 
     
    378386      ENDIF 
    379387 
     388      IF( wrk_not_released(3, 1,2,3) )   CALL ctl_stop('blk_oce_clio: failed to release workspace arrays') 
     389      ! 
    380390   END SUBROUTINE blk_oce_clio 
    381391 
     
    408418      !! 
    409419      !!---------------------------------------------------------------------- 
     420      USE wrk_nemo, ONLY:   wrk_in_use, wrk_not_released 
     421      USE wrk_nemo, ONLY:   ztatm  => wrk_2d_1   ! Tair in Kelvin 
     422      USE wrk_nemo, ONLY:   zqatm  => wrk_2d_2   ! specific humidity 
     423      USE wrk_nemo, ONLY:   zevsqr => wrk_2d_3   ! vapour pressure square-root 
     424      USE wrk_nemo, ONLY:   zrhoa  => wrk_2d_4   ! air density 
     425      USE wrk_nemo, ONLY:   wrk_3d_1 , wrk_3d_2 
     426      !! 
    410427      REAL(wp), INTENT(in   ), DIMENSION(:,:,:)   ::   pst      ! ice surface temperature                   [Kelvin] 
    411428      REAL(wp), INTENT(in   ), DIMENSION(:,:,:)   ::   palb_cs  ! ice albedo (clear    sky) (alb_ice_cs)         [%] 
     
    435452      REAL(wp) ::   ztice3, zticemb, zticemb2, zdqlw, zdqsb     !    -         - 
    436453      !! 
    437       REAL(wp), DIMENSION(jpi,jpj) ::   ztatm   ! Tair in Kelvin 
    438       REAL(wp), DIMENSION(jpi,jpj) ::   zqatm   ! specific humidity 
    439       REAL(wp), DIMENSION(jpi,jpj) ::   zevsqr  ! vapour pressure square-root 
    440       REAL(wp), DIMENSION(jpi,jpj) ::   zrhoa   ! air density 
    441       REAL(wp), DIMENSION(jpi,jpj,pdim) ::   z_qlw, z_qsb 
     454      REAL(wp), DIMENSION(:,:,:), POINTER ::   z_qlw, z_qsb 
    442455      !!--------------------------------------------------------------------- 
     456 
     457      IF(  wrk_in_use(2, 1,2,3,4)  .OR.  wrk_in_use(3, 1,2)  ) THEN 
     458         CALL ctl_stop('blk_ice_clio: requested workspace arrays are unavailable')   ;   RETURN 
     459      ELSE IF(pdim > jpk)THEN 
     460         CALL ctl_stop('blk_ice_clio: too many ice levels to use wrk_nemo 3D workspaces.') 
     461         RETURN 
     462      END IF 
     463      z_qlw => wrk_3d_1(:,:,1:pdim) 
     464      z_qsb => wrk_3d_2(:,:,1:pdim) 
    443465 
    444466      ijpl  = pdim                           ! number of ice categories 
     
    612634      ENDIF 
    613635 
    614  
     636      IF( wrk_not_released(2, 1,2,3,4)  .OR.   & 
     637          wrk_not_released(3, 1,2)      )   CALL ctl_stop('blk_ice_clio: failed to release workspace arrays') 
     638      ! 
    615639   END SUBROUTINE blk_ice_clio 
    616640 
     
    626650      !!               - also initialise sbudyko and stauc once for all  
    627651      !!---------------------------------------------------------------------- 
     652      USE wrk_nemo, ONLY:   wrk_in_use, wrk_not_released 
     653      USE wrk_nemo, ONLY:   zev   => wrk_2d_1                  ! vapour pressure 
     654      USE wrk_nemo, ONLY:   zdlha => wrk_2d_2 , zlsrise => wrk_2d_3 , zlsset => wrk_2d_4  
     655      USE wrk_nemo, ONLY:   zps   => wrk_2d_5 , zpc     => wrk_2d_6   ! sin/cos of latitude per sin/cos of solar declination  
     656      !! 
    628657      REAL(wp), INTENT(  out), DIMENSION(jpi,jpj)     ::   pqsr_oce    ! shortwave radiation  over the ocean 
    629658      !! 
     
    644673      REAL(wp) ::   zxday, zdist, zcoef, zcoef1      ! 
    645674      REAL(wp) ::   zes 
    646       !! 
    647       REAL(wp), DIMENSION(jpi,jpj) ::   zev          ! vapour pressure 
    648       REAL(wp), DIMENSION(jpi,jpj) ::   zdlha, zlsrise, zlsset     ! 2D workspace 
    649  
    650       REAL(wp), DIMENSION(jpi,jpj) ::   zps, zpc   ! sine (cosine) of latitude per sine (cosine) of solar declination  
    651675      !!--------------------------------------------------------------------- 
    652676 
     677      IF( wrk_in_use(2, 1,2,3,4,5,6) ) THEN 
     678         CALL ctl_stop('blk_clio_qsr_oce: requested workspace arrays unavailable')   ;   RETURN 
     679      END IF 
    653680 
    654681      IF( lbulk_init ) THEN             !   Initilization at first time step only 
     
    764791      END DO 
    765792 
     793      IF( wrk_not_released(2, 1,2,3,4,5,6) )   CALL ctl_stop('blk_clio_qsr_oce: failed to release workspace arrays') 
     794      ! 
    766795   END SUBROUTINE blk_clio_qsr_oce 
    767796 
     
    777806      !!               - also initialise sbudyko and stauc once for all  
    778807      !!---------------------------------------------------------------------- 
     808      USE wrk_nemo, ONLY:   wrk_in_use, wrk_not_released 
     809      USE wrk_nemo, ONLY:   zev     => wrk_2d_1     ! vapour pressure 
     810      USE wrk_nemo, ONLY:   zdlha   => wrk_2d_2     ! 2D workspace 
     811      USE wrk_nemo, ONLY:   zlsrise => wrk_2d_3     ! 2D workspace 
     812      USE wrk_nemo, ONLY:   zlsset  => wrk_2d_4     ! 2D workspace 
     813      USE wrk_nemo, ONLY:   zps     => wrk_2d_5 , zpc => wrk_2d_6   ! sin/cos of latitude per sin/cos of solar declination  
     814      !! 
    779815      REAL(wp), INTENT(in   ), DIMENSION(:,:,:) ::   pa_ice_cs   ! albedo of ice under clear sky 
    780816      REAL(wp), INTENT(in   ), DIMENSION(:,:,:) ::   pa_ice_os   ! albedo of ice under overcast sky 
     
    794830      REAL(wp) ::   zxday, zdist, zcoef, zcoef1   !    -         - 
    795831      REAL(wp) ::   zqsr_ice_cs, zqsr_ice_os      !    -         - 
    796       !! 
    797       REAL(wp), DIMENSION(jpi,jpj) ::   zev                      ! vapour pressure 
    798       REAL(wp), DIMENSION(jpi,jpj) ::   zdlha, zlsrise, zlsset   ! 2D workspace 
    799       REAL(wp), DIMENSION(jpi,jpj) ::   zps, zpc   ! sine (cosine) of latitude per sine (cosine) of solar declination  
    800832      !!--------------------------------------------------------------------- 
     833 
     834      IF( wrk_in_use(2, 1,2,3,4,5,6) ) THEN 
     835         CALL ctl_stop('blk_clio_qsr_ice: requested workspace arrays unavailable')   ;   RETURN 
     836      ENDIF 
    801837 
    802838      ijpl = SIZE(pqsr_ice, 3 )      ! number of ice categories 
     
    901937      END DO 
    902938      ! 
     939      IF( wrk_not_released(2, 1,2,3,4,5,6) )   CALL ctl_stop('blk_clio_qsr_ice: failed to release workspace arrays') 
     940      ! 
    903941   END SUBROUTINE blk_clio_qsr_ice 
    904942 
Note: See TracChangeset for help on using the changeset viewer.