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 508 for trunk/NEMO/OPA_SRC/DIA/diaptr.F90 – NEMO

Ignore:
Timestamp:
2006-10-03T17:58:55+02:00 (18 years ago)
Author:
opalod
Message:

nemo_v1_update_071:RB: add iom for restart and reorganization of restart

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/NEMO/OPA_SRC/DIA/diaptr.F90

    r460 r508  
    55   !!                 (please no more than 2 lines) 
    66   !!===================================================================== 
     7   !! History :  9.0  !  03-09  (C. Talandir, G. Madec)  Original code 
     8   !!            9.0  !  06-01  (A. Biastoch)  Allow sub-basins computation 
     9   !!---------------------------------------------------------------------- 
     10 
    711   !!---------------------------------------------------------------------- 
    812   !!   dia_ptr      : Poleward Transport Diagnostics module 
     
    1418   !!                : flux array; Generic interface: ptr_vj_3d, ptr_vj_2d 
    1519   !!---------------------------------------------------------------------- 
    16    !! History : 
    17    !!   9.0  !  03-09  (C. Talandir, G. Madec)  Original code 
    18    !!   9.0  !  06-01  (A. Biastoch)  Allow sub-basins computation 
    19    !!---------------------------------------------------------------------- 
    20    !! * Modules used 
    2120   USE oce           ! ocean dynamics and active tracers 
    2221   USE dom_oce       ! ocean space and time domain 
     
    2625   USE dianam 
    2726   USE phycst 
    28    USE ioipsl          ! NetCDF IPSL library 
     27   USE iom 
     28   USE ioipsl          
    2929   USE daymod 
    3030 
     
    3636   END INTERFACE 
    3737 
    38    !! *  Routine accessibility 
    39    PUBLIC dia_ptr_init   ! call in opa module 
    40    PUBLIC dia_ptr        ! call in step module 
    41    PUBLIC ptr_vj         ! call by tra_ldf & tra_adv routines 
    42    PUBLIC ptr_vjk        ! call by tra_ldf & tra_adv routines 
    43  
    44    !! * Share Module variables 
    45    LOGICAL, PUBLIC ::       & !!! ** init namelist (namptr) ** 
    46       ln_diaptr = .FALSE.,  &  !: Poleward transport flag (T) or not (F) 
    47       ln_subbas = .FALSE.      !: Atlantic/Pacific/Indian basins calculation 
    48    INTEGER, PUBLIC ::       & !!: ** ptr namelist (namptr) ** 
    49       nf_ptr = 15              !: frequency of ptr computation 
    50    REAL(wp), PUBLIC, DIMENSION(jpj) ::   &   !!: poleward transport 
    51       pht_adv, pst_adv,     &  !: heat and salt: advection 
    52       pht_ove, pst_ove,     &  !: heat and salt: overturning 
    53       pht_ldf, pst_ldf,     &  !: heat and salt: lateral diffusion 
    54 #if defined key_diaeiv 
    55       pht_eiv, pst_eiv,     &  !: heat and salt: bolus advection 
    56 #endif 
    57       ht_atl,ht_ind,ht_pac, &  !: heat 
    58       st_atl,st_ind,st_pac     !: salt 
    59    REAL(wp),DIMENSION(jpi,jpj) ::   & 
    60       abasin,pbasin,ibasin     !: return function value 
     38   PUBLIC   dia_ptr_init   ! call in opa module 
     39   PUBLIC   dia_ptr        ! call in step module 
     40   PUBLIC   ptr_vj         ! call by tra_ldf & tra_adv routines 
     41   PUBLIC   ptr_vjk        ! call by tra_ldf & tra_adv routines 
     42 
     43   !!! ** init namelist (namptr) 
     44   LOGICAL , PUBLIC                 ::   ln_diaptr = .FALSE.   !: Poleward transport flag (T) or not (F) 
     45   LOGICAL , PUBLIC                 ::   ln_subbas = .FALSE.   !: Atlantic/Pacific/Indian basins calculation 
     46   INTEGER , PUBLIC                 ::   nf_ptr = 15           !: frequency of ptr computation 
     47 
     48   REAL(wp), PUBLIC, DIMENSION(jpj) ::   pht_adv, pst_adv      !: heat and salt poleward transport: advection 
     49   REAL(wp), PUBLIC, DIMENSION(jpj) ::   pht_ove, pst_ove      !: heat and salt poleward transport: overturning 
     50   REAL(wp), PUBLIC, DIMENSION(jpj) ::   pht_ldf, pst_ldf      !: heat and salt poleward transport: lateral diffusion 
     51#if defined key_diaeiv 
     52   REAL(wp), PUBLIC, DIMENSION(jpj) ::   pht_eiv, pst_eiv      !: heat and salt poleward transport: bolus advection 
     53#endif 
     54   REAL(wp), PUBLIC, DIMENSION(jpj) ::   ht_atl,ht_ind,ht_pac  !: heat 
     55   REAL(wp), PUBLIC, DIMENSION(jpj) ::   st_atl,st_ind,st_pac  !: salt 
     56 
    6157      
    6258 
    63    !! Module variables 
    64    REAL(wp), DIMENSION(jpj,jpk) ::   &   
    65       tn_jk  , sn_jk  ,  &  !: "zonal" mean temperature and salinity 
    66       v_msf_atl       ,  &  !: "meridional" Stream-Function 
    67       v_msf_glo       ,  &  !: "meridional" Stream-Function 
    68       v_msf_ipc       ,  &  !: "meridional" Stream-Function 
    69 #if defined key_diaeiv 
    70       v_msf_eiv       ,  &  !: bolus "meridional" Stream-Function 
    71 #endif 
    72       surf_jk_r             !: inverse of the ocean "zonal" section surface 
     59   REAL(wp), DIMENSION(jpj,jpk) ::   tn_jk  , sn_jk  ,  &  !: "zonal" mean temperature and salinity 
     60      &                              v_msf_atl       ,  &  !: "meridional" Stream-Function 
     61      &                              v_msf_glo       ,  &  !: "meridional" Stream-Function 
     62      &                              v_msf_ipc       ,  &  !: "meridional" Stream-Function 
     63      &                              surf_jk_r             !: inverse of the ocean "zonal" section surface 
     64#if defined key_diaeiv 
     65   REAL(wp), DIMENSION(jpj,jpk) ::   v_msf_eiv                  !: bolus "meridional" Stream-Function 
     66#endif 
     67   REAL(wp), DIMENSION(jpi,jpj) ::   abasin, pbasin, ibasin     !: return function value 
    7368 
    7469   !! * Substitutions 
     
    7873   !!   OPA 9.0 , LOCEAN-IPSL (2005)  
    7974   !! $Header$  
    80    !! This software is governed by the CeCILL licence see modipsl/doc/NEMO_CeCILL.txt  
     75   !! Software governed by the CeCILL licence (modipsl/doc/NEMO_CeCILL.txt) 
    8176   !!---------------------------------------------------------------------- 
    8277 
     
    9489      !! 
    9590      !! ** Action  : - p_fval: i-k-mean poleward flux of pva 
    96       !! 
    97       !!---------------------------------------------------------------------- 
    98       !! * arguments 
    99       REAL(wp) , INTENT(in), DIMENSION(jpi,jpj,jpk) ::   & 
    100          pva                         ! mask flux array at V-point 
    101  
    102       !! * local declarations 
    103       INTEGER  ::   ji, jj, jk        ! dummy loop arguments 
    104       INTEGER  ::   ijpj             ! ??? 
    105       REAL(wp),DIMENSION(jpj) ::   & 
    106          p_fval                       ! function value 
     91      !!---------------------------------------------------------------------- 
     92      REAL(wp) , INTENT(in), DIMENSION(jpi,jpj,jpk) ::   pva   ! mask flux array at V-point 
     93      !! 
     94      INTEGER                  ::   ji, jj, jk   ! dummy loop arguments 
     95      INTEGER                  ::   ijpj         ! ??? 
     96      REAL(wp), DIMENSION(jpj) ::   p_fval       ! function value 
    10797      !!-------------------------------------------------------------------- 
    108  
     98      ! 
    10999      ijpj = jpj 
    110100      p_fval(:) = 0.e0 
     
    116106         END DO 
    117107      END DO 
    118  
     108      ! 
    119109      IF( lk_mpp )   CALL mpp_sum( p_fval, ijpj )     !!bug  I presume 
    120  
     110      ! 
    121111   END FUNCTION ptr_vj_3d 
    122  
    123112 
    124113 
     
    134123      !! 
    135124      !! ** Action  : - p_fval: i-k-mean poleward flux of pva 
    136       !! 
    137       !!---------------------------------------------------------------------- 
    138       !! * arguments 
    139       REAL(wp) , INTENT(in), DIMENSION(jpi,jpj) ::   & 
    140          pva                         ! mask flux array at V-point 
    141  
    142       !! * local declarations 
    143       INTEGER  ::   ji,jj             ! dummy loop arguments 
    144       INTEGER  ::   ijpj             ! ??? 
    145       REAL(wp),DIMENSION(jpj) ::   & 
    146          p_fval                       ! function value 
     125      !!---------------------------------------------------------------------- 
     126      REAL(wp) , INTENT(in), DIMENSION(jpi,jpj) ::   pva   ! mask flux array at V-point 
     127      !! 
     128      INTEGER                  ::   ji,jj    ! dummy loop arguments 
     129      INTEGER                  ::   ijpj     ! ??? 
     130      REAL(wp), DIMENSION(jpj) ::   p_fval   ! function value 
    147131      !!-------------------------------------------------------------------- 
    148        
     132      !  
    149133      ijpj = jpj 
    150134      p_fval(:) = 0.e0 
     
    154138         END DO 
    155139      END DO 
    156  
     140      ! 
    157141      IF( lk_mpp )   CALL mpp_sum( p_fval, ijpj )     !!bug  I presume 
    158   
    159     END FUNCTION ptr_vj_2d 
    160  
     142      !  
     143   END FUNCTION ptr_vj_2d 
    161144 
    162145 
     
    171154      !! 
    172155      !! ** Action  : - p_fval: i-k-mean poleward flux of pva 
    173       !! 
    174       !!---------------------------------------------------------------------- 
    175       !! * arguments 
    176       REAL(wp) , INTENT(in), DIMENSION(jpi,jpj,jpk) ::   & 
    177          pva                         ! mask flux array at V-point 
    178  
    179       !! * local declarations 
    180       INTEGER  ::   ji, jj, jk        ! dummy loop arguments 
    181       INTEGER, DIMENSION (1) :: ish 
    182       INTEGER, DIMENSION (2) :: ish2 
    183       REAL(wp),DIMENSION(jpj*jpk) ::   & 
    184          zwork                        ! temporary vector for mpp_sum 
    185       REAL(wp),DIMENSION(jpj,jpk) ::   & 
    186          p_fval                       ! return function value 
     156      !!---------------------------------------------------------------------- 
     157      REAL(wp) , INTENT(in), DIMENSION(jpi,jpj,jpk) ::   pva   ! mask flux array at V-point 
     158      !! 
     159      INTEGER                      ::   ji, jj, jk   ! dummy loop arguments 
     160      INTEGER , DIMENSION (1)      ::   ish 
     161      INTEGER , DIMENSION (2)      ::   ish2 
     162      REAL(wp), DIMENSION(jpj*jpk) ::   zwork        ! temporary vector for mpp_sum 
     163      REAL(wp), DIMENSION(jpj,jpk) ::   p_fval       ! return function value 
    187164      !!-------------------------------------------------------------------- 
    188   
     165      !  
    189166      p_fval(:,:) = 0.e0 
    190  
     167      ! 
    191168      DO jk = 1, jpkm1 
    192169         DO jj = 2, jpjm1 
     
    197174         END DO 
    198175      END DO 
    199  
     176      ! 
    200177      IF(lk_mpp) THEN 
    201178         ish(1) = jpj*jpk  ;  ish2(1) = jpj  ;  ish2(2) = jpk 
     
    204181         p_fval(:,:)= RESHAPE( zwork, ish2 ) 
    205182      END IF 
    206  
     183      ! 
    207184   END FUNCTION ptr_vjk 
     185 
    208186 
    209187   FUNCTION ptr_vtjk( pva )   RESULT ( p_fval ) 
     
    218196      !! 
    219197      !! ** Action  : - p_fval: i-k-mean poleward flux of pva 
    220       !! 
    221       !!---------------------------------------------------------------------- 
    222       !! * arguments 
    223       REAL(wp) , INTENT(in), DIMENSION(jpi,jpj,jpk) ::   & 
    224          pva                         ! mask flux array at V-point 
    225   
    226       !! * local declarations 
    227       INTEGER  ::   ji, jj, jk        ! dummy loop arguments 
    228       INTEGER, DIMENSION (1) :: ish 
    229       INTEGER, DIMENSION (2) :: ish2 
    230       REAL(wp),DIMENSION(jpj*jpk) ::   & 
    231          zwork                        ! temporary vector for mpp_sum 
    232       REAL(wp),DIMENSION(jpj,jpk) ::   & 
    233          p_fval                       ! return function value 
     198      !!---------------------------------------------------------------------- 
     199      REAL(wp) , INTENT(in), DIMENSION(jpi,jpj,jpk) ::   pva   ! mask flux array at V-point 
     200      !! 
     201      INTEGER                     ::   ji, jj, jk   ! dummy loop arguments 
     202      INTEGER, DIMENSION (1)      ::   ish 
     203      INTEGER, DIMENSION (2)      ::   ish2 
     204      REAL(wp),DIMENSION(jpj*jpk) ::   zwork        ! temporary vector for mpp_sum 
     205      REAL(wp),DIMENSION(jpj,jpk) ::   p_fval       ! return function value 
    234206      !!--------------------------------------------------------------------  
    235  
     207      ! 
    236208      p_fval(:,:) = 0.e0 
    237209      DO jk = 1, jpkm1 
     
    251223         p_fval(:,:)= RESHAPE(zwork,ish2) 
    252224      END IF 
    253  
     225      ! 
    254226   END FUNCTION ptr_vtjk 
    255227 
     
    259231      !!                  ***  ROUTINE dia_ptr  *** 
    260232      !!---------------------------------------------------------------------- 
    261       !! * Moudules used 
    262       USE ioipsl 
    263  
    264       !! * Argument 
    265233      INTEGER, INTENT(in) ::   kt   ! ocean time step index 
    266  
    267       !! * Local variables 
    268       INTEGER ::   jk,jj,ji               ! dummy loop 
    269       REAL(wp) ::    & 
    270          zsverdrup,  &              ! conversion from m3/s to Sverdrup 
    271          zpwatt,     &              ! conversion from W    to PW 
    272          zggram                     ! conversion from g    to Pg 
     234      !! 
     235      INTEGER  ::   jk, jj, ji               ! dummy loop 
     236      REAL(wp) ::   zsverdrup,  &              ! conversion from m3/s to Sverdrup 
     237         &          zpwatt,     &              ! conversion from W    to PW 
     238         &          zggram                     ! conversion from g    to Pg 
    273239 
    274240      REAL(wp), DIMENSION(jpi,jpj,jpk) ::  & 
     
    277243         vs_atl, vs_pac, vs_ind,           & 
    278244         zv_eiv 
    279       CHARACTER (len=32) ::   & 
    280          clnam = 'subbasins.nc'                 
    281       INTEGER ::  itime,inum,ipi,ipj,ipk       ! temporary integer 
    282       INTEGER, DIMENSION (1) ::   istep 
    283       REAL(wp) ::    zdate0,zsecond,zdt        ! temporary scalars 
    284       REAL(wp), DIMENSION(jpidta,jpjdta) ::   & 
    285          zlamt, zphit, zdta             ! temporary workspace (NetCDF read) 
    286       REAL(wp), DIMENSION(jpk) ::   & 
    287          zdept                          ! temporary workspace (NetCDF read) 
     245      INTEGER ::  inum       ! temporary logical unit 
    288246      !!---------------------------------------------------------------------- 
    289247 
     
    293251         zpwatt    = 1.e-15 
    294252         zggram    = 1.e-6 
    295          ipi       = jpidta 
    296          ipj       = jpjdta 
    297          ipk       = 1 
    298          itime     = 1 
    299          zsecond   = 0.e0 
    300          zdate0    = 0.e0 
    301253    
    302254# if defined key_diaeiv 
     
    315267         IF( ln_subbas ) THEN              ! Basins computation 
    316268 
    317             IF( kt == nit000 ) THEN                ! load basin mask 
    318                itime = 1 
    319                ipi   = jpidta 
    320                ipj   = jpjdta 
    321                ipk   = 1 
    322                zdt   = 0.e0 
    323                istep = 0 
    324                clnam = 'subbasins.nc' 
    325  
    326                CALL flinopen(clnam,1,jpidta,1,jpjdta,.FALSE.,ipi,ipj, & 
    327                   &          ipk,zlamt,zphit,zdept,itime,istep,zdate0,zdt,inum) 
    328  
    329                ! get basins: 
    330                abasin (:,:) = 0.e0 
    331                pbasin (:,:) = 0.e0 
    332                ibasin (:,:) = 0.e0 
    333  
    334                ! Atlantic basin 
    335                CALL flinget(inum,'atlmsk',jpidta,jpjdta,1,itime,1,   & 
    336                   &         0,1,jpidta,1,jpjdta,zdta(:,:)) 
    337                DO jj = 1, nlcj                                 ! interior values 
    338                   DO ji = 1, nlci 
    339                      abasin (ji,jj) = zdta( mig(ji), mjg(jj) ) 
    340                   END DO 
    341                END DO 
    342  
    343                ! Pacific basin 
    344                CALL flinget(inum,'pacmsk',jpidta,jpjdta,1,itime,1,   & 
    345                   &         0,1,jpidta,1,jpjdta,zdta(:,:)) 
    346                DO jj = 1, nlcj                                 ! interior values 
    347                   DO ji = 1, nlci 
    348                      pbasin (ji,jj) = zdta( mig(ji), mjg(jj) ) 
    349                   END DO 
    350                END DO 
    351  
    352                ! Indian basin 
    353                CALL flinget(inum,'indmsk',jpidta,jpjdta,1,itime,1,   & 
    354                   &         0,1,jpidta,1,jpjdta,zdta(:,:)) 
    355                DO jj = 1, nlcj                                 ! interior values 
    356                   DO ji = 1, nlci 
    357                      ibasin (ji,jj) = zdta( mig(ji), mjg(jj) ) 
    358                   END DO 
    359                END DO 
    360  
    361                CALL flinclo(inum) 
    362  
     269            IF( kt == nit000 ) THEN                ! load sub-basin mask 
     270               CALL iom_open( 'subbasins', inum ) 
     271               CALL iom_get( inum, jpdom_data, 'atlmsk', abasin )      ! Atlantic basin 
     272               CALL iom_get( inum, jpdom_data, 'pacmsk', pbasin )      ! Pacific basin 
     273               CALL iom_get( inum, jpdom_data, 'indmsk', ibasin )      ! Indian basin 
     274               CALL iom_close( inum ) 
    363275            ENDIF 
    364276 
     
    396308#endif 
    397309         IF( ln_subbas ) THEN 
    398             v_msf_atl(:,:) = ptr_vjk( v_atl(:,:,:) )  
    399             v_msf_ipc(:,:) = ptr_vjk( v_ipc(:,:,:) )  
    400             ht_atl(:) = SUM(ptr_vjk( vt_atl(:,:,:)),2 ) 
    401             ht_pac(:) = SUM(ptr_vjk( vt_pac(:,:,:)),2 ) 
    402             ht_ind(:) = SUM(ptr_vjk( vt_ind(:,:,:)),2 ) 
    403             st_atl(:) = SUM(ptr_vjk( vs_atl(:,:,:)),2 ) 
    404             st_pac(:) = SUM(ptr_vjk( vs_pac(:,:,:)),2 ) 
    405             st_ind(:) = SUM(ptr_vjk( vs_ind(:,:,:)),2 ) 
     310            v_msf_atl(:,:) = ptr_vjk( v_atl (:,:,:) )  
     311            v_msf_ipc(:,:) = ptr_vjk( v_ipc (:,:,:) )  
     312            ht_atl(:) = SUM( ptr_vjk( vt_atl(:,:,:)), 2 ) 
     313            ht_pac(:) = SUM( ptr_vjk( vt_pac(:,:,:)), 2 ) 
     314            ht_ind(:) = SUM( ptr_vjk( vt_ind(:,:,:)), 2 ) 
     315            st_atl(:) = SUM( ptr_vjk( vs_atl(:,:,:)), 2 ) 
     316            st_pac(:) = SUM( ptr_vjk( vs_pac(:,:,:)), 2 ) 
     317            st_ind(:) = SUM( ptr_vjk( vs_ind(:,:,:)), 2 ) 
    406318         ENDIF 
    407319 
     
    466378      ! Close the file 
    467379      IF( kt == nitend ) CALL histclo( numptr ) 
    468  
     380      ! 
    469381   END SUBROUTINE dia_ptr 
    470382 
     
    475387      !!                    
    476388      !! ** Purpose :   Initialization, namelist read 
    477       !! 
    478389      !!---------------------------------------------------------------------- 
    479390      REAL(wp), DIMENSION(jpi,jpj,jpk) ::   z_1         ! temporary workspace 
     
    485396      REWIND ( numnam ) 
    486397      READ   ( numnam, namptr ) 
    487  
    488398 
    489399      ! Control print 
     
    513423      !! 
    514424      !! ** Method  :   NetCDF file 
    515       !! 
    516       !!---------------------------------------------------------------------- 
    517       !! * Arguments 
     425      !!---------------------------------------------------------------------- 
    518426      INTEGER, INTENT(in) ::   kt   ! ocean time-step index 
    519  
    520       !! * Save variables    
     427      !! 
    521428      INTEGER, SAVE ::   nhoridz, ndepidzt, ndepidzw, ndex(1) 
    522429 
    523       !! * Local variables 
    524       CHARACTER (len=40) ::   & 
    525          clhstnam, clop             ! temporary names 
    526       INTEGER ::   iline, it, ji    ! 
    527       REAL(wp) ::   & 
    528          zsto, zout, zdt, zmax, &   ! temporary scalars 
    529          zjulian 
     430      CHARACTER (len=40)       ::   clhstnam, clop                   ! temporary names 
     431      INTEGER                  ::   iline, it, ji                    ! 
     432      REAL(wp)                 ::   zsto, zout, zdt, zmax, zjulian   ! temporary scalars 
    530433      REAL(wp), DIMENSION(jpj) ::   zphi, zfoo 
    531434      !!---------------------------------------------------------------------- 
     
    720623  
    721624      ENDIF 
    722  
     625      ! 
    723626   END SUBROUTINE dia_ptr_wri 
    724627 
Note: See TracChangeset for help on using the changeset viewer.