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/IOM/in_out_manager.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/IOM/in_out_manager.F90

    r2528 r2715  
    1212   !!---------------------------------------------------------------------- 
    1313 
    14    !!---------------------------------------------------------------------- 
    15    !!   ctl_stop   : update momentum and tracer Kz from a tke scheme 
    16    !!   ctl_warn   : initialization, namelist read, and parameters control 
    17    !!   getunit    : give the index of an unused logical unit 
    1814   !!---------------------------------------------------------------------- 
    1915   USE par_oce       ! ocean parameter 
     
    134130   !! $Id$ 
    135131   !! Software governed by the CeCILL licence     (NEMOGCM/NEMO_CeCILL.txt) 
    136    !!---------------------------------------------------------------------- 
    137 CONTAINS 
    138  
    139    SUBROUTINE ctl_stop( cd1, cd2, cd3, cd4, cd5,   & 
    140       &                 cd6, cd7, cd8, cd9, cd10 ) 
    141       !!---------------------------------------------------------------------- 
    142       !!                  ***  ROUTINE  stop_opa  *** 
    143       !! 
    144       !! ** Purpose :   print in ocean.outpput file a error message and  
    145       !!                increment the error number (nstop) by one. 
    146       !!---------------------------------------------------------------------- 
    147       CHARACTER(len=*), INTENT(in), OPTIONAL ::  cd1, cd2, cd3, cd4, cd5 
    148       CHARACTER(len=*), INTENT(in), OPTIONAL ::  cd6, cd7, cd8, cd9, cd10 
    149       !!---------------------------------------------------------------------- 
    150       ! 
    151       nstop = nstop + 1  
    152       IF(lwp) THEN 
    153          WRITE(numout,cform_err) 
    154          IF( PRESENT(cd1 ) ) WRITE(numout,*) cd1 
    155          IF( PRESENT(cd2 ) ) WRITE(numout,*) cd2 
    156          IF( PRESENT(cd3 ) ) WRITE(numout,*) cd3 
    157          IF( PRESENT(cd4 ) ) WRITE(numout,*) cd4 
    158          IF( PRESENT(cd5 ) ) WRITE(numout,*) cd5 
    159          IF( PRESENT(cd6 ) ) WRITE(numout,*) cd6 
    160          IF( PRESENT(cd7 ) ) WRITE(numout,*) cd7 
    161          IF( PRESENT(cd8 ) ) WRITE(numout,*) cd8 
    162          IF( PRESENT(cd9 ) ) WRITE(numout,*) cd9 
    163          IF( PRESENT(cd10) ) WRITE(numout,*) cd10 
    164       ENDIF 
    165                                CALL FLUSH(numout    ) 
    166       IF( numstp     /= -1 )   CALL FLUSH(numstp    ) 
    167       IF( numsol     /= -1 )   CALL FLUSH(numsol    ) 
    168       IF( numevo_ice /= -1 )   CALL FLUSH(numevo_ice) 
    169       ! 
    170    END SUBROUTINE ctl_stop 
    171  
    172  
    173    SUBROUTINE ctl_warn( cd1, cd2, cd3, cd4, cd5,   & 
    174       &                 cd6, cd7, cd8, cd9, cd10 ) 
    175       !!---------------------------------------------------------------------- 
    176       !!                  ***  ROUTINE  stop_warn  *** 
    177       !! 
    178       !! ** Purpose :   print in ocean.outpput file a error message and  
    179       !!                increment the warning number (nwarn) by one. 
    180       !!---------------------------------------------------------------------- 
    181       CHARACTER(len=*), INTENT(in), OPTIONAL ::  cd1, cd2, cd3, cd4, cd5 
    182       CHARACTER(len=*), INTENT(in), OPTIONAL ::  cd6, cd7, cd8, cd9, cd10 
    183       !!---------------------------------------------------------------------- 
    184       !  
    185       nwarn = nwarn + 1  
    186       IF(lwp) THEN 
    187          WRITE(numout,cform_war) 
    188          IF( PRESENT(cd1 ) ) WRITE(numout,*) cd1 
    189          IF( PRESENT(cd2 ) ) WRITE(numout,*) cd2 
    190          IF( PRESENT(cd3 ) ) WRITE(numout,*) cd3 
    191          IF( PRESENT(cd4 ) ) WRITE(numout,*) cd4 
    192          IF( PRESENT(cd5 ) ) WRITE(numout,*) cd5 
    193          IF( PRESENT(cd6 ) ) WRITE(numout,*) cd6 
    194          IF( PRESENT(cd7 ) ) WRITE(numout,*) cd7 
    195          IF( PRESENT(cd8 ) ) WRITE(numout,*) cd8 
    196          IF( PRESENT(cd9 ) ) WRITE(numout,*) cd9 
    197          IF( PRESENT(cd10) ) WRITE(numout,*) cd10 
    198       ENDIF 
    199       CALL FLUSH(numout) 
    200       ! 
    201    END SUBROUTINE ctl_warn 
    202  
    203  
    204    SUBROUTINE ctl_opn( knum, cdfile, cdstat, cdform, cdacce, klengh, kout, ldwp, karea ) 
    205       !!---------------------------------------------------------------------- 
    206       !!                  ***  ROUTINE ctl_opn  *** 
    207       !! 
    208       !! ** Purpose :   Open file and check if required file is available. 
    209       !! 
    210       !! ** Method  :   Fortan open 
    211       !!---------------------------------------------------------------------- 
    212       INTEGER          , INTENT(  out) ::   knum      ! logical unit to open 
    213       CHARACTER(len=*) , INTENT(in   ) ::   cdfile    ! file name to open 
    214       CHARACTER(len=*) , INTENT(in   ) ::   cdstat    ! disposition specifier 
    215       CHARACTER(len=*) , INTENT(in   ) ::   cdform    ! formatting specifier 
    216       CHARACTER(len=*) , INTENT(in   ) ::   cdacce    ! access specifier 
    217       INTEGER          , INTENT(in   ) ::   klengh    ! record length 
    218       INTEGER          , INTENT(in   ) ::   kout      ! number of logical units for write 
    219       LOGICAL          , INTENT(in   ) ::   ldwp      ! boolean term for print 
    220       INTEGER, OPTIONAL, INTENT(in   ) ::   karea     ! proc number 
    221       !! 
    222       CHARACTER(len=80) ::   clfile 
    223       INTEGER           ::   iost 
    224       !!---------------------------------------------------------------------- 
    225  
    226       ! adapt filename 
    227       ! ---------------- 
    228       clfile = TRIM(cdfile) 
    229       IF( PRESENT( karea ) ) THEN 
    230          IF( karea > 1 )   WRITE(clfile, "(a,'_',i4.4)") TRIM(clfile), karea-1 
    231       ENDIF 
    232 #if defined key_agrif 
    233       IF( .NOT. Agrif_Root() )   clfile = TRIM(Agrif_CFixed())//'_'//TRIM(clfile) 
    234       knum=Agrif_Get_Unit() 
    235 #else 
    236       knum=getunit() 
    237 #endif 
    238  
    239       iost=0 
    240       IF( cdacce(1:6) == 'DIRECT' )  THEN 
    241          OPEN( UNIT=knum, FILE=clfile, FORM=cdform, ACCESS=cdacce, STATUS=cdstat, RECL=klengh, ERR=100, IOSTAT=iost ) 
    242       ELSE 
    243          OPEN( UNIT=knum, FILE=clfile, FORM=cdform, ACCESS=cdacce, STATUS=cdstat             , ERR=100, IOSTAT=iost ) 
    244       ENDIF 
    245       IF( iost == 0 ) THEN 
    246          IF(ldwp) THEN 
    247             WRITE(kout,*) '     file   : ', clfile,' open ok' 
    248             WRITE(kout,*) '     unit   = ', knum 
    249             WRITE(kout,*) '     status = ', cdstat 
    250             WRITE(kout,*) '     form   = ', cdform 
    251             WRITE(kout,*) '     access = ', cdacce 
    252             WRITE(kout,*) 
    253          ENDIF 
    254       ENDIF 
    255 100   CONTINUE 
    256       IF( iost /= 0 ) THEN 
    257          IF(ldwp) THEN 
    258             WRITE(kout,*) 
    259             WRITE(kout,*) ' ===>>>> : bad opening file: ', clfile 
    260             WRITE(kout,*) ' =======   ===  ' 
    261             WRITE(kout,*) '           unit   = ', knum 
    262             WRITE(kout,*) '           status = ', cdstat 
    263             WRITE(kout,*) '           form   = ', cdform 
    264             WRITE(kout,*) '           access = ', cdacce 
    265             WRITE(kout,*) '           iostat = ', iost 
    266             WRITE(kout,*) '           we stop. verify the file ' 
    267             WRITE(kout,*) 
    268          ENDIF 
    269          STOP 'ctl_opn bad opening' 
    270       ENDIF 
    271        
    272    END SUBROUTINE ctl_opn 
    273  
    274  
    275    FUNCTION getunit() 
    276       !!---------------------------------------------------------------------- 
    277       !!                  ***  FUNCTION  getunit  *** 
    278       !! 
    279       !! ** Purpose :   return the index of an unused logical unit 
    280       !!---------------------------------------------------------------------- 
    281       INTEGER :: getunit 
    282       LOGICAL :: llopn  
    283       !!---------------------------------------------------------------------- 
    284       ! 
    285       getunit = 15   ! choose a unit that is big enough then it is not already used in NEMO 
    286       llopn = .TRUE. 
    287       DO WHILE( (getunit < 998) .AND. llopn ) 
    288          getunit = getunit + 1 
    289          INQUIRE( unit = getunit, opened = llopn ) 
    290       END DO 
    291       IF( (getunit == 999) .AND. llopn ) THEN 
    292          CALL ctl_stop( 'getunit: All logical units until 999 are used...' ) 
    293          getunit = -1 
    294       ENDIF 
    295       ! 
    296    END FUNCTION getunit 
    297  
    298132   !!===================================================================== 
    299133END MODULE in_out_manager 
Note: See TracChangeset for help on using the changeset viewer.