Ignore:
Timestamp:
2016-11-18T09:34:22+01:00 (4 years ago)
Author:
cbricaud
Message:

phaze the rest of NEMOGCM directory ( all except NEMO directory) of the CRS branch with nemo_v3_6_STABLE branch at rev 7213 (09-09-2016) (merge -r 5519:7213 )

Location:
branches/2015/dev_r5003_MERCATOR6_CRS/NEMOGCM/TOOLS
Files:
4 deleted
54 edited
23 copied

Legend:

Unmodified
Added
Removed
  • branches/2015/dev_r5003_MERCATOR6_CRS/NEMOGCM/TOOLS/COMPILE/Fmake_config.sh

    r3715 r7261  
    6565[ -f ${2}/EXP00/iodef.xml ] &&  \cp -R  ${2}/EXP00/iodef.xml ${1}/EXP00/. 
    6666[ -f ${2}/EXP00/field_def.xml ] &&  \cp -R  ${2}/EXP00/field_def.xml ${1}/EXP00/. 
     67[ -f ${2}/EXP00/file_def.xml ] &&  \cp -R  ${2}/EXP00/file_def.xml ${1}/EXP00/. 
    6768[ -f ${2}/EXP00/domain_def.xml ] &&  \cp -R  ${2}/EXP00/domain_def.xml ${1}/EXP00/. 
    6869[ -f ${2}/EXP00/xmlio_server.def ] &&  \cp -R  ${2}/EXP00/xmlio_server.def ${1}/EXP00/. 
  • branches/2015/dev_r5003_MERCATOR6_CRS/NEMOGCM/TOOLS/COMPILE/Fprep_agrif.sh

    r3294 r7261  
    5757#- AGRIF conv 
    5858if [ "$AGRIFUSE" == 1 ]; then 
     59#-MPI for AGRIF 
     60if [ ! -f ${MAIN_DIR}/EXTERNAL/AGRIF/nemo_mpi.h ];then 
     61   echo '#if defined key_mpp_mpi' > ${MAIN_DIR}/EXTERNAL/AGRIF/nemo_mpi.h 
     62   echo '#define AGRIF_MPI'      >> ${MAIN_DIR}/EXTERNAL/AGRIF/nemo_mpi.h 
     63   echo '#endif'                 >> ${MAIN_DIR}/EXTERNAL/AGRIF/nemo_mpi.h 
     64fi 
    5965 
    6066#- CONV 
    61 #fcm build ${TOOLS_DIR}/conv.cfg || exit 1 
    62 gmake -C ${MAIN_DIR}/EXTERNAL/AGRIF/LIB 
     67fcm build ${COMPIL_DIR}/conv.cfg || exit 1 
     68#C_COMPILER=${CC-cc} 
     69#gmake CC=${C_COMPILER} -C ${MAIN_DIR}/EXTERNAL/AGRIF/LIB 
    6370 
    6471#- AGRIF sources 
     
    6774[ ! -d $2/$1/OPAFILES/AGRIF_MODELFILES ] && mkdir  $2/$1/OPAFILES/AGRIF_MODELFILES 
    6875cp -f -r ${MAIN_DIR}/EXTERNAL/AGRIF/agrif_opa.in  $2/$1/OPAFILES/ 
    69 cp -f -r ${MAIN_DIR}/EXTERNAL/AGRIF/conv  $2/$1/OPAFILES/ 
     76#cp -f -r ${MAIN_DIR}/EXTERNAL/AGRIF/conv  $2/$1/OPAFILES/ 
     77cp -f -r $2/$1/AGRIFLIB/bin/conv  $2/$1/OPAFILES/ 
    7078 
    7179fi 
  • branches/2015/dev_r5003_MERCATOR6_CRS/NEMOGCM/TOOLS/COMPILE/bld.cfg

    r4990 r7261  
    4141bld::tool::fppflags::nemo      %FPPFLAGS -I$CONFIG_DIR/$NEW_CONF/OPAFILES/inc 
    4242bld::tool::fppflags::ioipsl    %FPPFLAGS 
    43 bld::tool::fppflags::agrif     %FPPFLAGS 
     43bld::tool::fppflags::agrif     %FPPFLAGS -include ${MAIN_DIR}/EXTERNAL/AGRIF/nemo_mpi.h 
    4444 
    4545# Ignore the following dependencies 
  • branches/2015/dev_r5003_MERCATOR6_CRS/NEMOGCM/TOOLS/COMPILE/bld_preproagr.cfg

    r4990 r7261  
    5252bld::excl_dep       use::ioipsl 
    5353bld::excl_dep       use::xios 
     54bld::excl_dep        use::agrif_grids 
    5455bld::excl_dep       use::agrif_types 
    5556bld::excl_dep       use::agrif_util 
  • branches/2015/dev_r5003_MERCATOR6_CRS/NEMOGCM/TOOLS/COMPILE/conv.cfg

    r3294 r7261  
    88# Build information 
    99# ------------------------------------------------------------------------------ 
    10 inc $COMPIL_DIR/arch.fcm 
     10inc $COMPIL_DIR/arch_nemo.fcm 
    1111 
     12bld::tool::cc        %CC 
     13bld::tool::cflags    %CFLAGS 
    1214bld::tool::make      %MK 
    1315 
     
    1921dir::root            $NEMO_TDIR/$NEW_CONF/AGRIFLIB 
    2022 
    21 bld::tool::cflags::convsrc  -O0   
    22 bld::tool::ld::convsrc   cc 
    23 bld::tool::ldflags::convsrc -O  ../obj/fortran.o ../obj/fortran.o  
    24 bld::pp 1 
     23#bld::tool::cflags::convsrc  -O0   
     24#bld::tool::ld::convsrc   cc 
     25#bld::tool::ldflags::convsrc -O  ../obj/fortran.o ../obj/fortran.o  
     26#bld::pp 1 
    2527 
    2628 
  • branches/2015/dev_r5003_MERCATOR6_CRS/NEMOGCM/TOOLS/COMPILE/tools.txt

    r2281 r7261  
    1 REBUILD  
     1SIREN  
  • branches/2015/dev_r5003_MERCATOR6_CRS/NEMOGCM/TOOLS/DMP_TOOLS/src/zoom.F90

    r4739 r7261  
    2929      NAMELIST/nam_zoom_dmp/lzoom_n,lzoom_e,lzoom_w,lzoom_s 
    3030      !!---------------------------------------------------------------------- 
    31       ! 
    32       IF( nn_timing == 1 )  CALL timing_start( 'dtacof_zoom') 
    33       ! 
    3431       
    3532      ! Read namelist 
  • branches/2015/dev_r5003_MERCATOR6_CRS/NEMOGCM/TOOLS/MISCELLANEOUS/icb_pp.py

    r4990 r7261  
    5555if procnum < 1: 
    5656   print('Need some files to collate! procnum = ',procnum) 
    57    sys.exit() 
     57   sys.exit(11) 
    5858 
    5959icu = [] 
  • branches/2015/dev_r5003_MERCATOR6_CRS/NEMOGCM/TOOLS/MPP_PREP/src/mpp_optimiz_zoom_nc.f90

    r2143 r7261  
    258258                 ijlb=ijdom(jni2,jnj2) 
    259259              ENDIF 
     260 
     261              ! Check wet points over the entire domain to preserve the MPI communication stencil 
    260262              isurf=0 
    261               DO jj=1+jprecj,ippdj(jni2,jnj2)-jprecj 
    262                  DO  ji=1+jpreci,ippdi(jni2,jnj2)-jpreci 
     263              DO jj=1,ippdj(jni2,jnj2) 
     264                 DO  ji=1,ippdi(jni2,jnj2) 
    263265                    IF(zmask(ji+iilb-1,jj+ijlb-1).EQ.1.) isurf=isurf+1 
    264266                 END DO 
    265267              END DO 
     268 
    266269              IF(isurf.EQ.0) THEN 
    267270                 ivide=ivide+1 
  • branches/2015/dev_r5003_MERCATOR6_CRS/NEMOGCM/TOOLS/MPP_PREP/src/mppopt_showproc_nc.f90

    r2143 r7261  
    289289                 ijlb=ijdom(jni2,jnj2) 
    290290              ENDIF 
     291 
     292              ! Check wet points over the entire domain to preserve the MPI communication stencil 
    291293              isurf=0 
    292  
    293               DO jj=1+jprecj,ippdj(jni2,jnj2)-jprecj 
    294                  DO  ji=1+jpreci,ippdi(jni2,jnj2)-jpreci 
     294              DO jj=1,ippdj(jni2,jnj2) 
     295                 DO  ji=1,ippdi(jni2,jnj2) 
    295296                    IF(zmask(ji+iilb-1,jj+ijlb-1).EQ.1.) isurf=isurf+1 
    296297                 END DO 
    297298              END DO 
     299 
    298300              IF(isurf.EQ.0) THEN 
    299301                 ivide=ivide+1 
  • branches/2015/dev_r5003_MERCATOR6_CRS/NEMOGCM/TOOLS/NESTING/agulhas

    r2455 r7261  
    1717    removeclosedseas = true 
    1818    type_bathy_interp = 0  
     19    rn_hmin = -3  
    1920/    
    2021 
     
    3940    pa1  = 245.58132232490 
    4041    N  = 31 
     42    ldbletanh   = .FALSE. 
     43    pa2         = 0.0 
     44    ppkth2      = 0.0 
     45    ppacr2      = 0.0 
    4146/     
    4247     
     
    4550    parent_bathy_meter = 'bathy_meter.nc' 
    4651    parent_batmet_name = 'Bathymetry' 
    47     e3zps_min = 25. 
    48     e3zps_rat = 0.2 
     52    e3zps_min = 20. 
     53    e3zps_rat = 0.1 
    4954/ 
    5055 
  • branches/2015/dev_r5003_MERCATOR6_CRS/NEMOGCM/TOOLS/NESTING/src/agrif_connect_topo.f90

    r2143 r7261  
    105105    IMPLICIT NONE 
    106106    ! 
    107     REAL*8 :: za1,za0,zsur,zacr,zkth,zmin,zmax 
     107    REAL*8 :: za2,za1,za0,zsur,zacr,zkth,zacr2,zkth2,zmin,zmax 
    108108    TYPE(Coordinates) :: Grid 
    109109    INTEGER :: i,j 
     
    134134       za0  = pa0 
    135135       za1  = pa1 
     136       za2  = pa2 
    136137       ! 
    137138    ELSE 
     
    147148 
    148149    zacr = ppacr 
    149     zkth = ppkth  
    150  
     150    zkth = ppkth 
     151    zacr2 = ppacr2 
     152    zkth2 = ppkth2    
    151153    ! 
    152154    ALLOCATE(gdepw(N),gdept(N),e3w(N),e3t(N)) 
    153155    ! 
    154     DO i = 1,N 
    155        gdepw(i) = (zsur+za0*i+za1*zacr*LOG(COSH((i-zkth)/zacr)))  
    156        gdept(i) = (zsur+za0*(i+0.5)+za1*zacr*LOG(COSH(((i+0.5)-zkth)/zacr))) 
    157        e3w(i)   = (za0 + za1 * TANH((i-zkth)/zacr)) 
    158        e3t(i)   = (za0 + za1 * TANH(((i+0.5)-zkth)/zacr)) 
    159     END DO 
     156    IF( ppkth == 0. ) THEN            !  uniform vertical grid  
     157       za1 = pphmax / FLOAT(N-1)  
     158       DO i = 1, N 
     159          gdepw(i) = ( i - 1   ) * za1 
     160          gdept(i) = ( i - 0.5 ) * za1 
     161          e3w  (i) =  za1 
     162          e3t  (i) =  za1 
     163       END DO 
     164    ELSE                            ! Madec & Imbard 1996 function 
     165       IF( .NOT. ldbletanh ) THEN 
     166          DO i = 1,N 
     167             !  
     168             gdepw(i) = (zsur+za0*i+za1*zacr*LOG(COSH((i-zkth)/zacr)))  
     169             gdept(i) = (zsur+za0*(i+0.5)+za1*zacr*LOG(COSH(((i+0.5)-zkth)/zacr))) 
     170             e3w(i)   = (za0 + za1 * TANH((i-zkth)/zacr)) 
     171             e3t(i)   = (za0 + za1 * TANH(((i+0.5)-zkth)/zacr)) 
     172             ! 
     173          END DO 
     174       ELSE 
     175          DO i = 1,N 
     176             ! Double tanh function 
     177             gdepw(i) = ( zsur + za0*i  + za1 * zacr * LOG ( COSH( (i-zkth ) / zacr  ) )               & 
     178                &                       + za2 * zacr2* LOG ( COSH( (i-zkth2) / zacr2 ) )  ) 
     179             gdept(i) = ( zsur + za0*(i+0.5) + za1 * zacr * LOG ( COSH( ((i+0.5)-zkth ) / zacr  ) )    & 
     180                &                            + za2 * zacr2* LOG ( COSH( ((i+0.5)-zkth2) / zacr2 ) )  ) 
     181             e3w  (i) =          za0         + za1        * TANH(       (i-zkth ) / zacr  )            & 
     182                &                            + za2        * TANH(       (i-zkth2) / zacr2 ) 
     183             e3t  (i) =          za0         + za1        * TANH(       ((i+0.5)-zkth ) / zacr  )      & 
     184                &                            + za2        * TANH(       ((i+0.5)-zkth2) / zacr2 ) 
     185            END DO 
     186       ENDIF 
     187    ENDIF 
    160188    ! 
    161189    gdepw(1) = 0.0 
    162190    zmax = gdepw(N) + e3t(N) 
    163     zmin = gdepw(4) 
     191    IF( rn_hmin < 0. ) THEN  ;   i = - INT( rn_hmin )                                  ! from a nb of level 
     192    ELSE                     ;   i = MINLOC( gdepw, mask = gdepw > rn_hmin, dim = 1 )  ! from a depth 
     193    ENDIF 
     194    zmin = gdepw(i+1) 
    164195    ! 
    165196    IF ( .NOT. ASSOCIATED(Grid%bathy_level)) & 
     
    227258    IMPLICIT NONE 
    228259    ! 
    229     REAL*8 :: za1,za0,zsur,zacr,zkth,zmin,zmax 
     260    REAL*8 :: za2,za1,za0,zsur,zacr,zkth,zacr2,zkth2,zmin,zmax 
    230261    TYPE(Coordinates) :: Grid 
    231262    INTEGER :: i,j 
     
    257288       za0  = pa0 
    258289       za1  = pa1 
     290       za2  = pa2 
    259291       ! 
    260292    ELSE 
     
    264296       WRITE(*,*) 'please check values of variables' 
    265297       WRITE(*,*) 'in namelist vertical_grid section' 
    266        WRITE(*,*) ' ' 
    267        STOP       
     298       WRITE(*,*) ' '  
     299       STOP      
    268300       !        
    269301    ENDIF 
    270     ! 
     302 
    271303    zacr = ppacr 
    272     zkth = ppkth  
    273  
     304    zkth = ppkth 
     305    zacr2 = ppacr2 
     306    zkth2 = ppkth2    
    274307    ! 
    275308    ALLOCATE(gdepw(N),gdept(N),e3w(N),e3t(N)) 
    276309    ! 
    277     DO i = 1,N 
    278        !  
    279        gdepw(i) = (zsur+za0*i+za1*zacr*LOG(COSH((i-zkth)/zacr)))  
    280        gdept(i) = (zsur+za0*(i+0.5)+za1*zacr*LOG(COSH(((i+0.5)-zkth)/zacr))) 
    281        e3w(i)   = (za0 + za1 * TANH((i-zkth)/zacr)) 
    282        e3t(i)   = (za0 + za1 * TANH(((i+0.5)-zkth)/zacr)) 
    283     END DO 
     310    IF( ppkth == 0. ) THEN            !  uniform vertical grid  
     311       za1 = pphmax / FLOAT(N-1)  
     312       DO i = 1, N 
     313          gdepw(i) = ( i - 1   ) * za1 
     314          gdept(i) = ( i - 0.5 ) * za1 
     315          e3w  (i) =  za1 
     316          e3t  (i) =  za1 
     317       END DO 
     318    ELSE                            ! Madec & Imbard 1996 function 
     319       IF( .NOT. ldbletanh ) THEN 
     320          DO i = 1,N 
     321             !  
     322             gdepw(i) = (zsur+za0*i+za1*zacr*LOG(COSH((i-zkth)/zacr)))  
     323             gdept(i) = (zsur+za0*(i+0.5)+za1*zacr*LOG(COSH(((i+0.5)-zkth)/zacr))) 
     324             e3w(i)   = (za0 + za1 * TANH((i-zkth)/zacr)) 
     325             e3t(i)   = (za0 + za1 * TANH(((i+0.5)-zkth)/zacr)) 
     326             ! 
     327          END DO 
     328       ELSE 
     329          DO i = 1,N 
     330             ! Double tanh function 
     331             gdepw(i) = ( zsur + za0*i  + za1 * zacr * LOG ( COSH( (i-zkth ) / zacr  ) )               & 
     332                &                       + za2 * zacr2* LOG ( COSH( (i-zkth2) / zacr2 ) )  ) 
     333             gdept(i) = ( zsur + za0*(i+0.5) + za1 * zacr * LOG ( COSH( ((i+0.5)-zkth ) / zacr  ) )    & 
     334                &                            + za2 * zacr2* LOG ( COSH( ((i+0.5)-zkth2) / zacr2 ) )  ) 
     335             e3w  (i) =          za0         + za1        * TANH(       (i-zkth ) / zacr  )            & 
     336                &                            + za2        * TANH(       (i-zkth2) / zacr2 ) 
     337             e3t  (i) =          za0         + za1        * TANH(       ((i+0.5)-zkth ) / zacr  )      & 
     338                &                            + za2        * TANH(       ((i+0.5)-zkth2) / zacr2 ) 
     339         END DO 
     340       ENDIF 
     341    ENDIF 
    284342    ! 
    285343    gdepw(1) = 0.0   
     
    684742  ! for consistency with fine grid bathymetry         * 
    685743  !                        * 
    686   ! if a given coarse grid point is masked and one of the      * 
    687   ! child grid points contained in this coarse cell is not masked * 
    688   ! the corresponding coarse grid point is unmasked with gdepw(4) * 
    689   ! value                        * 
     744  ! if a given coarse grid point is masked and one of the     * 
     745  ! child grid points contained in this coarse cell is not masked * 
     746  ! the corresponding coarse grid point is unmasked with rn_hmin * 
     747  ! value                            * 
    690748  !                        * 
    691749  ! - input :                    * 
     
    704762    ! 
    705763    INTEGER :: ideb,jdeb,ifin,jfin 
    706     REAL*8 :: za1,za0,zsur,zacr,zkth,zmin 
     764    REAL*8 :: za2,za1,za0,zsur,zacr,zkth,zacr2,zkth2,zmin 
    707765    INTEGER :: i,j 
    708766    INTEGER :: k1 
     
    727785       za0  = pa0 
    728786       za1  = pa1 
     787       za2  = pa2 
    729788       ! 
    730789    ELSE 
     
    740799 
    741800    zacr = ppacr 
    742     zkth = ppkth  
    743  
     801    zkth = ppkth 
     802    zacr2 = ppacr2 
     803    zkth2 = ppkth2    
    744804    ! 
    745805    ALLOCATE(gdepw(N),gdept(N),e3w(N),e3t(N)) 
    746806    ! 
    747     DO i = 1,N 
    748        !  
    749        gdepw(i) = (zsur+za0*i+za1*zacr*LOG(COSH((i-zkth)/zacr)))  
    750        gdept(i) = (zsur+za0*(i+0.5)+za1*zacr*LOG(COSH(((i+0.5)-zkth)/zacr))) 
    751        e3w(i)   = (za0 + za1 * TANH((i-zkth)/zacr)) 
    752        e3t(i)   = (za0 + za1 * TANH(((i+0.5)-zkth)/zacr)) 
    753     END DO 
    754     ! 
    755     zmin = gdepw(4) 
     807    IF( ppkth == 0. ) THEN            !  uniform vertical grid  
     808       za1 = pphmax / FLOAT(N-1)  
     809       DO i = 1, N 
     810          gdepw(i) = ( i - 1   ) * za1 
     811          gdept(i) = ( i - 0.5 ) * za1 
     812          e3w  (i) =  za1 
     813          e3t  (i) =  za1 
     814       END DO 
     815    ELSE                            ! Madec & Imbard 1996 function 
     816       IF( .NOT. ldbletanh ) THEN 
     817          DO i = 1,N 
     818             !  
     819             gdepw(i) = (zsur+za0*i+za1*zacr*LOG(COSH((i-zkth)/zacr)))  
     820             gdept(i) = (zsur+za0*(i+0.5)+za1*zacr*LOG(COSH(((i+0.5)-zkth)/zacr))) 
     821             e3w(i)   = (za0 + za1 * TANH((i-zkth)/zacr)) 
     822             e3t(i)   = (za0 + za1 * TANH(((i+0.5)-zkth)/zacr)) 
     823             ! 
     824          END DO 
     825       ELSE 
     826          DO i = 1,N 
     827             ! Double tanh function 
     828             gdepw(i) = ( zsur + za0*i  + za1 * zacr * LOG ( COSH( (i-zkth ) / zacr  ) )               & 
     829                &                       + za2 * zacr2* LOG ( COSH( (i-zkth2) / zacr2 ) )  ) 
     830             gdept(i) = ( zsur + za0*(i+0.5) + za1 * zacr * LOG ( COSH( ((i+0.5)-zkth ) / zacr  ) )    & 
     831                &                            + za2 * zacr2* LOG ( COSH( ((i+0.5)-zkth2) / zacr2 ) )  ) 
     832             e3w  (i) =          za0         + za1        * TANH(       (i-zkth ) / zacr  )            & 
     833                &                            + za2        * TANH(       (i-zkth2) / zacr2 ) 
     834             e3t  (i) =          za0         + za1        * TANH(       ((i+0.5)-zkth ) / zacr  )      & 
     835                &                            + za2        * TANH(       ((i+0.5)-zkth2) / zacr2 ) 
     836          END DO 
     837       ENDIF 
     838    ENDIF 
     839    ! 
     840    IF( rn_hmin < 0. ) THEN  ;   i = - INT( rn_hmin )                                  ! from a nb of level 
     841    ELSE                     ;   i = MINLOC( gdepw, mask = gdepw > rn_hmin, dim = 1 )  ! from a depth 
     842    ENDIF 
     843    zmin = gdepw(i+1) 
    756844    !       
    757845    diff = 0 
  • branches/2015/dev_r5003_MERCATOR6_CRS/NEMOGCM/TOOLS/NESTING/src/agrif_partial_steps.f90

    r2143 r7261  
    3636    !        
    3737    TYPE(Coordinates) :: Grid                      
    38     REAL*8 :: za1,za0,zsur,zacr,zkth,zdepth,zdepwp,zmin,zmax,zdiff,ze3tp,ze3wp 
     38    REAL*8 :: za2,za1,za0,zsur,zacr,zkth,zacr2,zkth2,zdepth,zdepwp,zmin,zmax,zdiff,ze3tp,ze3wp 
    3939    INTEGER :: i,j,jk,jj,ji,jpj,jpi,ik,ii,ipt,jpt 
    4040    INTEGER, DIMENSION(1) :: k 
     
    7676       za0  = pa0 
    7777       za1  = pa1 
     78       za2  = pa2 
    7879       ! 
    7980    ELSE 
     
    8889    ENDIF 
    8990 
    90     zacr = ppacr 
    91     zkth = ppkth        
    92     ! 
    93     DO i = 1,N 
    94        !  
    95        gdepw(i) = (zsur+za0*i+za1*zacr*LOG(COSH((i-zkth)/zacr)))  
    96        gdept(i) = (zsur+za0*(i+0.5)+za1*zacr*LOG(COSH(((i+0.5)-zkth)/zacr))) 
    97        e3w(i)   = (za0 + za1 * TANH((i-zkth)/zacr)) 
    98        e3t(i)   = (za0 + za1 * TANH(((i+0.5)-zkth)/zacr)) 
    99        ! 
    100     END DO 
    101     ! 
    102  
     91    zacr  = ppacr 
     92    zkth  = ppkth      
     93    zacr2 = ppacr2 
     94    zkth2 = ppkth2   
     95    ! 
     96    IF( ppkth == 0. ) THEN            !  uniform vertical grid  
     97         za1 = pphmax / FLOAT(N-1)  
     98         DO i = 1, N 
     99            gdepw(i) = ( i - 1   ) * za1 
     100            gdept(i) = ( i - 0.5 ) * za1 
     101            e3w  (i) =  za1 
     102            e3t  (i) =  za1 
     103         END DO 
     104    ELSE                            ! Madec & Imbard 1996 function 
     105       IF( .NOT. ldbletanh ) THEN 
     106          DO i = 1,N 
     107             !  
     108             gdepw(i) = (zsur+za0*i+za1*zacr*LOG(COSH((i-zkth)/zacr)))  
     109             gdept(i) = (zsur+za0*(i+0.5)+za1*zacr*LOG(COSH(((i+0.5)-zkth)/zacr))) 
     110             e3w(i)   = (za0 + za1 * TANH((i-zkth)/zacr)) 
     111             e3t(i)   = (za0 + za1 * TANH(((i+0.5)-zkth)/zacr)) 
     112             ! 
     113          END DO 
     114       ELSE 
     115            DO i = 1,N 
     116               ! Double tanh function 
     117               gdepw(i) = ( zsur + za0*i  + za1 * zacr * LOG ( COSH( (i-zkth ) / zacr  ) )               & 
     118                  &                       + za2 * zacr2* LOG ( COSH( (i-zkth2) / zacr2 ) )  ) 
     119               gdept(i) = ( zsur + za0*(i+0.5) + za1 * zacr * LOG ( COSH( ((i+0.5)-zkth ) / zacr  ) )    & 
     120                  &                            + za2 * zacr2* LOG ( COSH( ((i+0.5)-zkth2) / zacr2 ) )  ) 
     121               e3w  (i) =          za0         + za1        * TANH(       (i-zkth ) / zacr  )            & 
     122                  &                            + za2        * TANH(       (i-zkth2) / zacr2 ) 
     123               e3t  (i) =          za0         + za1        * TANH(       ((i+0.5)-zkth ) / zacr  )      & 
     124                  &                            + za2        * TANH(       ((i+0.5)-zkth2) / zacr2 ) 
     125            END DO 
     126       ENDIF 
     127    ENDIF 
    103128    gdepw(1) = 0.0   
    104129    ! 
     
    106131    ! 
    107132    zmax = gdepw(N) + e3t(N) 
    108     zmin = gdepw(4) 
     133    IF( rn_hmin < 0. ) THEN  ;   i = - INT( rn_hmin )                                  ! from a nb of level 
     134    ELSE                     ;   i = MINLOC( gdepw, mask = gdepw > rn_hmin, dim = 1 )  ! from a depth 
     135    ENDIF 
     136    zmin = gdepw(i+1) 
    109137    ! 
    110138    ! Initialize bathy_level to the maximum ocean level available 
     
    235263    INTEGER :: i,j,ji,ij,ii,jj,jpt,ipt 
    236264    REAL,DIMENSION(N) :: gdepw,e3t 
    237     REAL :: za0,za1,zsur,zacr,zkth,zmin,zmax,zdepth 
     265    REAL :: za0,za1,za2,zsur,zacr,zacr2,zkth,zkth2,zmin,zmax,zdepth 
    238266    INTEGER :: kbathy,jk,diff 
    239267    INTEGER :: bornex,borney,bornex2,borney2 
    240     !        
     268    ! 
    241269    IF ( ( pa0 == 0 .OR. pa1 == 0 .OR. psur == 0 ) & 
    242270         .AND. ppdzmin.NE.0 .AND. pphmax.NE.0 ) THEN  
    243271       !     
     272       WRITE(*,*) 'psur,pa0,pa1 computed' 
    244273       za1=( ppdzmin - pphmax / (N-1) )          & 
    245274            / ( TANH((1-ppkth)/ppacr) - ppacr/(N-1) & 
     
    253282         pa0.NE.0 .AND. pa1.NE.0 ) THEN 
    254283       !        
     284       WRITE(*,*) 'psur,pa0,pa1 given by namelist' 
    255285       zsur = psur 
    256286       za0  = pa0 
    257287       za1  = pa1 
     288       za2  = pa2 
    258289       ! 
    259290    ELSE 
     
    263294       WRITE(*,*) 'please check values of variables' 
    264295       WRITE(*,*) 'in namelist vertical_grid section' 
    265        WRITE(*,*) ' '       
    266        !        
    267     ENDIF 
    268     !        
    269     zacr = ppacr 
    270     zkth = ppkth        
    271     ! 
    272     DO i = 1,N 
    273        !  
    274        gdepw(i) = (zsur+za0*i+za1*zacr*LOG(COSH((i-zkth)/zacr))) 
    275        e3t(i)   = (za0 + za1 * TANH(((i+0.5)-zkth)/zacr))        
    276     END DO 
    277     ! 
     296       WRITE(*,*) ' '   
     297       STOP     
     298       !        
     299    ENDIF 
     300 
     301    zacr  = ppacr 
     302    zkth  = ppkth      
     303    zacr2 = ppacr2 
     304    zkth2 = ppkth2   
     305    ! 
     306    IF( ppkth == 0. ) THEN            !  uniform vertical grid  
     307         za1 = pphmax / FLOAT(N-1)  
     308         DO i = 1, N 
     309            gdepw(i) = ( i - 1   ) * za1 
     310            e3t  (i) =  za1 
     311         END DO 
     312    ELSE                            ! Madec & Imbard 1996 function 
     313       IF( .NOT. ldbletanh ) THEN 
     314          DO i = 1,N 
     315             !  
     316             gdepw(i) = (zsur+za0*i+za1*zacr*LOG(COSH((i-zkth)/zacr)))  
     317             e3t(i)   = (za0 + za1 * TANH(((i+0.5)-zkth)/zacr)) 
     318             ! 
     319          END DO 
     320       ELSE 
     321            DO i = 1,N 
     322               ! Double tanh function 
     323               gdepw(i) = ( zsur + za0*i  + za1 * zacr * LOG ( COSH( (i-zkth ) / zacr  ) )               & 
     324                  &                       + za2 * zacr2* LOG ( COSH( (i-zkth2) / zacr2 ) )  ) 
     325               e3t  (i) =          za0         + za1        * TANH(       ((i+0.5)-zkth ) / zacr  )      & 
     326                  &                            + za2        * TANH(       ((i+0.5)-zkth2) / zacr2 ) 
     327            END DO 
     328       ENDIF 
     329    ENDIF 
    278330    gdepw(1) = 0.0 
    279     ! 
    280331    ! 
    281332    diff = 0       
     
    344395    ! 
    345396    zmax = gdepw(N) + e3t(N) 
    346     zmin = gdepw(4)  
     397    IF( rn_hmin < 0. ) THEN  ;   i = - INT( rn_hmin )                                  ! from a nb of level 
     398    ELSE                     ;   i = MINLOC( gdepw, mask = gdepw > rn_hmin, dim = 1 )  ! from a depth 
     399    ENDIF 
     400    zmin = gdepw(i+1) 
    347401    ! 
    348402    ! check that interpolated value stays at the same level          
     
    646700    REAL*8, DIMENSION(:,:,:) :: fse3u,fse3t,fse3v 
    647701    !                                   
    648     REAL*8 :: za1,za0,zsur,zacr,zkth,zdepth,zdepwp,zmin,zmax,zdiff,ze3tp,ze3wp 
     702    REAL*8 :: za2,za1,za0,zsur,zacr,zkth,zacr2,zkth2,zdepth,zdepwp,zmin,zmax,zdiff,ze3tp,ze3wp 
    649703    INTEGER :: i,j,jk,jj,ji,jpj,jpi,ik,ii,ipt,jpt,jpk 
    650704    INTEGER, DIMENSION(1) :: k 
     
    660714    ALLOCATE(gdepw(jpk),e3t(jpk)) 
    661715    ALLOCATE(gdepw_ps(jpi,jpj,jpk))                   
    662     !        
     716    !   
    663717    IF ( ( pa0 == 0 .OR. pa1 == 0 .OR. psur == 0 ) & 
    664718         .AND. ppdzmin.NE.0 .AND. pphmax.NE.0 ) THEN  
     
    668722            / ( TANH((1-ppkth)/ppacr) - ppacr/(jpk-1) & 
    669723            *  (  LOG( COSH( (jpk - ppkth) / ppacr) )      & 
    670             - LOG( COSH( ( 1  - ppkth) / ppacr) )  )  )  
    671        ! 
     724            - LOG( COSH( ( 1  - ppkth) / ppacr) )  )  ) 
     725 
    672726       za0  = ppdzmin - za1 * TANH( (1-ppkth) / ppacr ) 
    673727       zsur = - za0 - za1 * ppacr * LOG( COSH( (1-ppkth) / ppacr )  ) 
     
    676730         pa0.NE.0 .AND. pa1.NE.0 ) THEN 
    677731       !        
     732       WRITE(*,*) 'psur,pa0,pa1 given by namelist' 
    678733       zsur = psur 
    679734       za0  = pa0 
    680        za1  = pa1    
    681        !        
    682     ENDIF 
    683  
    684     zacr = ppacr 
    685     zkth = ppkth        
     735       za1  = pa1 
     736       za2  = pa2 
     737       ! 
     738    ELSE 
     739       !        
     740       WRITE(*,*) 'ERROR ***** bad vertical grid parameters ...'  
     741       WRITE(*,*) ' ' 
     742       WRITE(*,*) 'please check values of variables' 
     743       WRITE(*,*) 'in namelist vertical_grid section' 
     744       WRITE(*,*) ' '   
     745       STOP     
     746       !        
     747    ENDIF 
     748 
     749    zacr  = ppacr 
     750    zkth  = ppkth      
     751    zacr2 = ppacr2 
     752    zkth2 = ppkth2   
     753    ! 
     754    IF( ppkth == 0. ) THEN            !  uniform vertical grid  
     755         za1 = pphmax / FLOAT(jpk-1)  
     756         DO i = 1, jpk 
     757            gdepw(i) = ( i - 1   ) * za1 
     758            e3t  (i) =  za1 
     759         END DO 
     760    ELSE                            ! Madec & Imbard 1996 function 
     761       IF( .NOT. ldbletanh ) THEN 
     762          DO i = 1,jpk 
     763             !  
     764             gdepw(i) = (zsur+za0*i+za1*zacr*LOG(COSH((i-zkth)/zacr)))  
     765             e3t(i)   = (za0 + za1 * TANH(((i+0.5)-zkth)/zacr)) 
     766             ! 
     767          END DO 
     768       ELSE 
     769            DO i = 1,jpk 
     770               ! Double tanh function 
     771               gdepw(i) = ( zsur + za0*i  + za1 * zacr * LOG ( COSH( (i-zkth ) / zacr  ) )               & 
     772                  &                       + za2 * zacr2* LOG ( COSH( (i-zkth2) / zacr2 ) )  ) 
     773               e3t  (i) =          za0         + za1        * TANH(       ((i+0.5)-zkth ) / zacr  )      & 
     774                  &                            + za2        * TANH(       ((i+0.5)-zkth2) / zacr2 ) 
     775            END DO 
     776       ENDIF 
     777    ENDIF          
    686778    !          
    687779    !                 
    688780    DO i = 1,jpk 
    689        !  
    690        gdepw(i) = (zsur+za0*i+za1*zacr*LOG(COSH((i-zkth)/zacr)))  
    691        e3t(i)   = (za0 + za1 * TANH(((i+0.5)-zkth)/zacr)) 
    692781       !        
    693782       fse3t(:,:,i) = e3t(i) 
     
    700789    ! 
    701790    zmax = gdepw(jpk) + e3t(jpk) 
    702     zmin = gdepw(4) 
     791    IF( rn_hmin < 0. ) THEN  ;   i = - INT( rn_hmin )                                  ! from a nb of level 
     792    ELSE                     ;   i = MINLOC( gdepw, mask = gdepw > rn_hmin, dim = 1 )  ! from a depth 
     793    ENDIF 
     794    zmin = gdepw(i+1) 
    703795    ! 
    704796    DO jj = 1, jpj 
  • branches/2015/dev_r5003_MERCATOR6_CRS/NEMOGCM/TOOLS/NESTING/src/agrif_types.f90

    r2455 r7261  
    5151  INTEGER jpizoom,jpjzoom,nb_connection_pts 
    5252  !       
    53   REAL*8 ppacr,ppdzmin,pphmax,ppkth,smoothing_factor,e3zps_min,e3zps_rat 
    54   REAL*8 psur,pa0,pa1,adatrj 
     53  REAL*8 rn_hmin 
     54  REAL*8 ppkth2, ppacr2, ppkth,ppacr,ppdzmin,pphmax,smoothing_factor,e3zps_min,e3zps_rat 
     55  REAL*8 psur,pa0,pa1,pa2,adatrj 
    5556  !        
     57  LOGICAL ldbletanh 
    5658  LOGICAL partial_steps,smoothing,bathy_update 
    5759  LOGICAL new_topo,removeclosedseas,dimg,iom_activated 
     
    7072  !       
    7173  NAMELIST /bathymetry/new_topo,elevation_database,elevation_name,smoothing,smoothing_factor, & 
    72        nb_connection_pts,removeclosedseas,type_bathy_interp       
     74       nb_connection_pts,removeclosedseas,type_bathy_interp,rn_hmin       
    7375  !       
    7476  NAMELIST /nesting/imin,imax,jmin,jmax,rho,rhot,bathy_update,updated_parent_file       
    7577  ! 
    76   NAMELIST /vertical_grid/ppkth,ppacr,ppdzmin,pphmax,psur,pa0,pa1,N 
     78  NAMELIST /vertical_grid/ppkth,ppacr,ppdzmin,pphmax,psur,pa0,pa1,N,ldbletanh,pa2,ppkth2,ppacr2 
    7779  !  
    7880  NAMELIST /partial_cells/partial_steps,parent_bathy_meter,parent_batmet_name,e3zps_min,e3zps_rat       
  • branches/2015/dev_r5003_MERCATOR6_CRS/NEMOGCM/TOOLS/REBUILD_NEMO/src/rebuild_nemo.f90

    r3025 r7261  
    200200      WRITE(numerr,*) 'Attribute DOMAIN_number_total is : ', ndomain_file 
    201201      WRITE(numerr,*) 'Number of files specified in namelist is: ', ndomain 
    202       STOP 
     202      STOP 9 
    203203   ENDIF 
    204204   
     
    268268      WRITE(numerr,*) 'Attribute DOMAIN_local_sizes is : ', local_sizes 
    269269      WRITE(numerr,*) 'Dimensions to be rebuilt are of size : ', outdimlens(rebuild_dims(1)), outdimlens(rebuild_dims(2))  
    270       STOP 
     270      STOP 9 
    271271   ENDIF 
    272272 
     
    384384            SELECT CASE( xtype ) 
    385385               CASE( NF90_BYTE ) 
     386                  globaldata_0d_i1 = 0 
    386387                  CALL check_nf90( nf90_get_var( ncid, jv, globaldata_0d_i1 ) ) 
    387388               CASE( NF90_SHORT ) 
     389                  globaldata_0d_i2 = 0 
    388390                  CALL check_nf90( nf90_get_var( ncid, jv, globaldata_0d_i2 ) ) 
    389391               CASE( NF90_INT ) 
     392                  globaldata_0d_i4 = 0 
    390393                  CALL check_nf90( nf90_get_var( ncid, jv, globaldata_0d_i4 ) ) 
    391394               CASE( NF90_FLOAT ) 
     395                  globaldata_0d_sp = 0. 
    392396                  CALL check_nf90( nf90_get_var( ncid, jv, globaldata_0d_sp ) ) 
    393397               CASE( NF90_DOUBLE ) 
     398                  globaldata_0d_dp = 0. 
    394399                  CALL check_nf90( nf90_get_var( ncid, jv, globaldata_0d_dp ) ) 
    395400               CASE DEFAULT 
    396401                  WRITE(numerr,*) 'Unknown nf90 type: ', xtype 
    397                   STOP 
     402                  STOP 9 
    398403            END SELECT 
    399404 
     
    403408               CASE( NF90_BYTE ) 
    404409                  ALLOCATE(globaldata_1d_i1(indimlens(dimids(1)))) 
     410                  globaldata_1d_i1(:) = 0 
    405411                  CALL check_nf90( nf90_get_var( ncid, jv, globaldata_1d_i1 ) ) 
    406412               CASE( NF90_SHORT ) 
    407413                  ALLOCATE(globaldata_1d_i2(indimlens(dimids(1)))) 
     414                  globaldata_1d_i2(:) = 0 
    408415                  CALL check_nf90( nf90_get_var( ncid, jv, globaldata_1d_i2 ) ) 
    409416               CASE( NF90_INT ) 
    410417                  ALLOCATE(globaldata_1d_i4(indimlens(dimids(1)))) 
     418                  globaldata_1d_i4(:) = 0 
    411419                  CALL check_nf90( nf90_get_var( ncid, jv, globaldata_1d_i4 ) ) 
    412420               CASE( NF90_FLOAT ) 
    413421                  ALLOCATE(globaldata_1d_sp(indimlens(dimids(1)))) 
     422                  globaldata_1d_sp(:) = 0. 
    414423                  CALL check_nf90( nf90_get_var( ncid, jv, globaldata_1d_sp ) ) 
    415424               CASE( NF90_DOUBLE ) 
    416425                  ALLOCATE(globaldata_1d_dp(indimlens(dimids(1)))) 
     426                  globaldata_1d_dp(:) = 0. 
    417427                  CALL check_nf90( nf90_get_var( ncid, jv, globaldata_1d_dp ) ) 
    418428               CASE DEFAULT 
    419429                  WRITE(numerr,*) 'Unknown nf90 type: ', xtype 
    420                   STOP 
     430                  STOP 9 
    421431            END SELECT 
    422432 
     
    426436               CASE( NF90_BYTE ) 
    427437                  ALLOCATE(globaldata_2d_i1(indimlens(dimids(1)),indimlens(dimids(2)))) 
     438                  globaldata_2d_i1(:,:) = 0 
    428439                  CALL check_nf90( nf90_get_var( ncid, jv, globaldata_2d_i1 ) ) 
    429440               CASE( NF90_SHORT ) 
    430441                  ALLOCATE(globaldata_2d_i2(indimlens(dimids(1)),indimlens(dimids(2)))) 
     442                  globaldata_2d_i2(:,:) = 0 
    431443                  CALL check_nf90( nf90_get_var( ncid, jv, globaldata_2d_i2 ) ) 
    432444               CASE( NF90_INT ) 
    433445                  ALLOCATE(globaldata_2d_i4(indimlens(dimids(1)),indimlens(dimids(2)))) 
     446                  globaldata_2d_i4(:,:) = 0 
    434447                  CALL check_nf90( nf90_get_var( ncid, jv, globaldata_2d_i4 ) ) 
    435448               CASE( NF90_FLOAT ) 
    436449                  ALLOCATE(globaldata_2d_sp(indimlens(dimids(1)),indimlens(dimids(2)))) 
     450                  globaldata_2d_sp(:,:) = 0. 
    437451                  CALL check_nf90( nf90_get_var( ncid, jv, globaldata_2d_sp ) ) 
    438452               CASE( NF90_DOUBLE ) 
    439453                  ALLOCATE(globaldata_2d_dp(indimlens(dimids(1)),indimlens(dimids(2)))) 
     454                  globaldata_2d_dp(:,:) = 0. 
    440455                  CALL check_nf90( nf90_get_var( ncid, jv, globaldata_2d_dp ) ) 
    441456               CASE DEFAULT 
    442457                  WRITE(numerr,*) 'Unknown nf90 type: ', xtype 
    443                   STOP 
     458                  STOP 9 
    444459            END SELECT 
    445460 
     
    450465                  ALLOCATE(globaldata_3d_i1(indimlens(dimids(1)),indimlens(dimids(2)),       & 
    451466                     &                      indimlens(dimids(3)))) 
     467                  globaldata_3d_i1(:,:,:) = 0 
    452468                  CALL check_nf90( nf90_get_var( ncid, jv, globaldata_3d_i1 ) ) 
    453469               CASE( NF90_SHORT ) 
    454470                  ALLOCATE(globaldata_3d_i2(indimlens(dimids(1)),indimlens(dimids(2)),       & 
    455471                     &                      indimlens(dimids(3)))) 
     472                  globaldata_3d_i2(:,:,:) = 0 
    456473                  CALL check_nf90( nf90_get_var( ncid, jv, globaldata_3d_i2 ) ) 
    457474               CASE( NF90_INT ) 
    458475                  ALLOCATE(globaldata_3d_i4(indimlens(dimids(1)),indimlens(dimids(2)),       & 
    459476                     &                      indimlens(dimids(3)))) 
     477                  globaldata_3d_i4(:,:,:) = 0 
    460478                  CALL check_nf90( nf90_get_var( ncid, jv, globaldata_3d_i4 ) ) 
    461479               CASE( NF90_FLOAT ) 
    462480                  ALLOCATE(globaldata_3d_sp(indimlens(dimids(1)),indimlens(dimids(2)),       & 
    463481                     &                      indimlens(dimids(3)))) 
     482                  globaldata_3d_sp(:,:,:) = 0. 
    464483                  CALL check_nf90( nf90_get_var( ncid, jv, globaldata_3d_sp ) ) 
    465484               CASE( NF90_DOUBLE ) 
    466485                  ALLOCATE(globaldata_3d_dp(indimlens(dimids(1)),indimlens(dimids(2)),       & 
    467486                     &                      indimlens(dimids(3)))) 
     487                  globaldata_3d_dp(:,:,:) = 0. 
    468488                  CALL check_nf90( nf90_get_var( ncid, jv, globaldata_3d_dp ) ) 
    469489               CASE DEFAULT 
    470490                  WRITE(numerr,*) 'Unknown nf90 type: ', xtype 
    471                   STOP 
     491                  STOP 9 
    472492            END SELECT 
    473493 
     
    478498                  ALLOCATE(globaldata_4d_i1(indimlens(dimids(1)),indimlens(dimids(2)),       & 
    479499                     &                      indimlens(dimids(3)),ntchunk)) 
     500                  globaldata_4d_i1(:,:,:,:) = 0 
    480501                  CALL check_nf90( nf90_get_var( ncid, jv, globaldata_4d_i1, start=(/1,1,1,nt/) ) ) 
    481502               CASE( NF90_SHORT ) 
    482503                  ALLOCATE(globaldata_4d_i2(indimlens(dimids(1)),indimlens(dimids(2)),       & 
    483504                     &                      indimlens(dimids(3)),ntchunk)) 
     505                  globaldata_4d_i2(:,:,:,:) = 0 
    484506                  CALL check_nf90( nf90_get_var( ncid, jv, globaldata_4d_i2, start=(/1,1,1,nt/) ) ) 
    485507               CASE( NF90_INT ) 
    486508                  ALLOCATE(globaldata_4d_i4(indimlens(dimids(1)),indimlens(dimids(2)),       & 
    487509                     &                      indimlens(dimids(3)),ntchunk)) 
     510                  globaldata_4d_i4(:,:,:,:) = 0 
    488511                  CALL check_nf90( nf90_get_var( ncid, jv, globaldata_4d_i4, start=(/1,1,1,nt/) ) ) 
    489512               CASE( NF90_FLOAT ) 
    490513                  ALLOCATE(globaldata_4d_sp(indimlens(dimids(1)),indimlens(dimids(2)),       & 
    491514                     &                      indimlens(dimids(3)),ntchunk)) 
     515                  globaldata_4d_sp(:,:,:,:) = 0. 
    492516                  CALL check_nf90( nf90_get_var( ncid, jv, globaldata_4d_sp, start=(/1,1,1,nt/) ) ) 
    493517               CASE( NF90_DOUBLE ) 
    494518                  ALLOCATE(globaldata_4d_dp(indimlens(dimids(1)),indimlens(dimids(2)),       & 
    495519                     &                      indimlens(dimids(3)),ntchunk)) 
     520                  globaldata_4d_dp(:,:,:,:) = 0. 
    496521                  CALL check_nf90( nf90_get_var( ncid, jv, globaldata_4d_dp, start=(/1,1,1,nt/) ) ) 
    497522               CASE DEFAULT 
    498523                  WRITE(numerr,*) 'Unknown nf90 type: ', xtype 
    499                   STOP 
     524                  STOP 9 
    500525            END SELECT 
    501526 
     
    517542               CASE( NF90_BYTE ) 
    518543                  ALLOCATE(globaldata_1d_i1(outdimlens(dimids(1)))) 
     544                  globaldata_1d_i1(:) = 0 
    519545               CASE( NF90_SHORT ) 
    520546                  ALLOCATE(globaldata_1d_i2(outdimlens(dimids(1)))) 
     547                  globaldata_1d_i2(:) = 0 
    521548               CASE( NF90_INT ) 
    522549                  ALLOCATE(globaldata_1d_i4(outdimlens(dimids(1)))) 
     550                  globaldata_1d_i4(:) = 0 
    523551               CASE( NF90_FLOAT ) 
    524552                  ALLOCATE(globaldata_1d_sp(outdimlens(dimids(1)))) 
     553                  globaldata_1d_sp(:) = 0. 
    525554               CASE( NF90_DOUBLE ) 
    526555                  ALLOCATE(globaldata_1d_dp(outdimlens(dimids(1)))) 
     556                  globaldata_1d_dp(:) = 0. 
    527557               CASE DEFAULT 
    528558                  WRITE(numerr,*) 'Unknown nf90 type: ', xtype 
    529                   STOP 
     559                  STOP 9 
    530560            END SELECT 
    531561 
     
    535565               CASE( NF90_BYTE ) 
    536566                  ALLOCATE(globaldata_2d_i1(outdimlens(dimids(1)),outdimlens(dimids(2)))) 
     567                  globaldata_2d_i1(:,:) = 0 
    537568               CASE( NF90_SHORT ) 
    538569                  ALLOCATE(globaldata_2d_i2(outdimlens(dimids(1)),outdimlens(dimids(2)))) 
     570                  globaldata_2d_i2(:,:) = 0 
    539571               CASE( NF90_INT ) 
    540572                  ALLOCATE(globaldata_2d_i4(outdimlens(dimids(1)),outdimlens(dimids(2)))) 
     573                  globaldata_2d_i4(:,:) = 0 
    541574               CASE( NF90_FLOAT ) 
    542575                  ALLOCATE(globaldata_2d_sp(outdimlens(dimids(1)),outdimlens(dimids(2)))) 
     576                  globaldata_2d_sp(:,:) = 0. 
    543577               CASE( NF90_DOUBLE ) 
    544578                  ALLOCATE(globaldata_2d_dp(outdimlens(dimids(1)),outdimlens(dimids(2)))) 
     579                  globaldata_2d_dp(:,:) = 0. 
    545580               CASE DEFAULT 
    546581                  WRITE(numerr,*) 'Unknown nf90 type: ', xtype 
    547                   STOP 
     582                  STOP 9 
    548583            END SELECT 
    549584 
     
    554589                  ALLOCATE(globaldata_3d_i1(outdimlens(dimids(1)),outdimlens(dimids(2)),     & 
    555590                     &                      outdimlens(dimids(3)))) 
     591                  globaldata_3d_i1(:,:,:) = 0 
    556592               CASE( NF90_SHORT ) 
    557593                  ALLOCATE(globaldata_3d_i2(outdimlens(dimids(1)),outdimlens(dimids(2)),     & 
    558594                     &                      outdimlens(dimids(3)))) 
     595                  globaldata_3d_i2(:,:,:) = 0 
    559596               CASE( NF90_INT ) 
    560597                  ALLOCATE(globaldata_3d_i4(outdimlens(dimids(1)),outdimlens(dimids(2)),     & 
    561598                     &                      outdimlens(dimids(3)))) 
     599                  globaldata_3d_i4(:,:,:) = 0 
    562600               CASE( NF90_FLOAT ) 
    563601                  ALLOCATE(globaldata_3d_sp(outdimlens(dimids(1)),outdimlens(dimids(2)),     & 
    564602                     &                      outdimlens(dimids(3)))) 
     603                  globaldata_3d_sp(:,:,:) = 0. 
    565604               CASE( NF90_DOUBLE ) 
    566605                  ALLOCATE(globaldata_3d_dp(outdimlens(dimids(1)),outdimlens(dimids(2)),     & 
    567606                     &                      outdimlens(dimids(3)))) 
     607                  globaldata_3d_dp(:,:,:) = 0. 
    568608               CASE DEFAULT 
    569609                  WRITE(numerr,*) 'Unknown nf90 type: ', xtype 
    570                   STOP 
     610                  STOP 9 
    571611            END SELECT 
    572612 
     
    577617                  ALLOCATE(globaldata_4d_i1(outdimlens(dimids(1)),outdimlens(dimids(2)),     & 
    578618                     &                      outdimlens(dimids(3)),ntchunk)) 
     619                   globaldata_4d_i1(:,:,:,:) = 0 
    579620               CASE( NF90_SHORT ) 
    580621                  ALLOCATE(globaldata_4d_i2(outdimlens(dimids(1)),outdimlens(dimids(2)),     & 
    581622                     &                      outdimlens(dimids(3)),ntchunk)) 
     623                  globaldata_4d_i2(:,:,:,:) = 0 
    582624               CASE( NF90_INT ) 
    583625                  ALLOCATE(globaldata_4d_i4(outdimlens(dimids(1)),outdimlens(dimids(2)),     & 
    584626                     &                      outdimlens(dimids(3)),ntchunk)) 
     627                  globaldata_4d_i4(:,:,:,:) = 0 
    585628               CASE( NF90_FLOAT ) 
    586629                  ALLOCATE(globaldata_4d_sp(outdimlens(dimids(1)),outdimlens(dimids(2)),     & 
    587630                     &                      outdimlens(dimids(3)),ntchunk)) 
     631                  globaldata_4d_sp(:,:,:,:) = 0. 
    588632               CASE( NF90_DOUBLE ) 
    589633                  ALLOCATE(globaldata_4d_dp(outdimlens(dimids(1)),outdimlens(dimids(2)),     & 
    590634                     &                      outdimlens(dimids(3)),ntchunk)) 
     635                  globaldata_4d_dp(:,:,:,:) = 0. 
    591636               CASE DEFAULT 
    592637                  WRITE(numerr,*) 'Unknown nf90 type: ', xtype 
    593                   STOP 
     638                  STOP 9 
    594639            END SELECT 
    595640         ELSE 
    596641            WRITE(numerr,*) 'ERROR! : A netcdf variable has more than 4 dimensions which is not taken into account' 
    597             STOP 
     642            STOP 9 
    598643         ENDIF 
    599644 
     
    9671012            IF( nthreads == 1 .AND. istop /= nf90_noerr )  THEN 
    9681013               WRITE(numerr,*) '*** NEMO rebuild failed! ***' 
    969                STOP 
     1014               STOP 9 
    9701015            ENDIF 
    9711016         
     
    9761021         IF( istop /= nf90_noerr )  THEN 
    9771022            WRITE(numerr,*) '*** NEMO rebuild failed! ***' 
    978             STOP 
     1023            STOP 9 
    9791024         ENDIF 
    9801025 
     
    10501095            CASE DEFAULT    
    10511096               WRITE(numerr,*) 'Unknown nf90 type: ', xtype 
    1052                STOP 
     1097               STOP 9 
    10531098         END SELECT      
    10541099                       
     
    10731118            CASE DEFAULT    
    10741119               WRITE(numerr,*) 'Unknown nf90 type: ', xtype 
    1075                STOP 
     1120               STOP 9 
    10761121         END SELECT      
    10771122     
     
    10961141            CASE DEFAULT    
    10971142               WRITE(numerr,*) 'Unknown nf90 type: ', xtype 
    1098                STOP 
     1143               STOP 9 
    10991144         END SELECT      
    11001145     
     
    11461191            WRITE(numerr,*) "*** NEMO rebuild failed ***" 
    11471192            WRITE(numerr,*) 
    1148             STOP 
     1193            STOP 9 
    11491194         ENDIF 
    11501195      ENDIF 
  • branches/2015/dev_r5003_MERCATOR6_CRS/NEMOGCM/TOOLS/SIREN/README

    r5602 r7261  
    1 This is a first release of SIREN. 
    21 
    3 To create SIREN documentation, go to ./src and run doxygen  
     2To create SIREN documentation, run doxygen in TOOLS/SIREN directory 
    43(http://www.stack.nl/~dimitri/doxygen/index.html version 1.8.3.1 or upper) 
    54then 
    6    open ../doc/index.html  
     5   open ./TOOLS/SIREN/doc/html/index.html in your web browser  
    76or  
    8    run ../doc/latex/gmake and open refman.pdf  
    9  
    10  
    11 templates of namelists could be find in templates directory. 
    12 read documentation for more information. 
    13  
    14  1- program to create coordinate file : 
    15  
    16    ./create_coord create_coord.nam 
    17  
    18  
    19  Variables are extracted from the input coordinates coarse grid and 
    20  interpolated to create fine coordinates files. 
    21  
    22  2- program to create bathymetry file: 
    23  
    24  ./create_bathy create_bathy.nam 
    25  
    26  Bathymetry could be extracted from fine grid Bathymetry file, or 
    27  interpolated from coarse grid Bathymetry file. 
    28  
    29  3- program to merge bathymetry file at boundaries : 
    30  
    31  ./merge_bathy merge_bathy.nam 
    32  
    33  Coarse grid Bathymetry is interpolated on fine grid. 
    34  Then fine Bathymetry and refined coarse bathymetry are merged at 
    35  boundaries. 
    36  
    37  4- program to create restart file : 
    38  
    39  ./create_restart create_restart.nam 
    40  
    41  Variables are read from restart file, or standard output. 
    42  Then theses variables are interpolated on fine grid. 
    43  Finally table are split over new decomposition. 
    44  
    45  5- program to create boundary files (OBC) : 
    46  
    47  ./create_boundary create_boundary.nam 
    48  
    49  Variables are read from standard output. 
    50  Then theses variables are interpolated on fine grid boundaries. 
     7   run ./TOOLS/SIREN/doc/latex/gmake and open ./TOOLS/SIREN/doc/latex/refman.pdf  
  • branches/2015/dev_r5003_MERCATOR6_CRS/NEMOGCM/TOOLS/SIREN/cfg/variable.cfg

    r5602 r7261  
    1 # name       | units          | axis | point | standard name                | long name          | interpolation 
    2 X            | 1              | X    |   | projection_x_coordinate          |                    |                       
    3 Y            | 1              | Y    |   | projection_y_coordinate          |                    |                       
    4 Z            | 1              | Z    |   | projection_z_coordinate          |                    |                       
    5 T            | 1              | T    |   | projection_t_coordinate          |                    |                       
    6 nav_lon      | degrees_east   | XY   | T | longitude                        | Longitude          | cubic                       
    7 nav_lat      | degrees_north  | XY   | T | latitude                         | Latitude           | cubic          
    8 nav_lev      | model_levels   | Z    | T |                                  | Model levels       | cubic         
    9 deptht       | m              | Z    | T | depth                            | Vertical T levels  | 
    10 time_counter |                | T    |   | time                             | Time axis          |  
    11 Bathymetry   | m              | XY   | T | bathymetry                       | Bathymetry         | cubic          
    12 votemper     | degree_Celsius | XYZT | T | sea_water_potential_temperature  | Temperature        | cubic          
    13 vozocrtx     | m s-1          | XYZT | U |                                  | Zonal velocity     | cubic          
    14 vomecrty     | m s-1          | XYZT | V |                                  | Meridional velocity| cubic          
    15 vosaline     | PSU            | XYZT | T | sea_water_salinity               | Salinity           | cubic          
    16 sossheig     | m              | XYT  | T | sea_surface_height               | Sea Surface Height | cubic          
    17 glamt        | degrees_east   | XY   | T |                                  | Longitude_T        | cubic 
    18 glamu        | degrees_east   | XY   | U |                                  | Longitude_U        | cubic             
    19 glamv        | degrees_east   | XY   | V |                                  | Longitude_V        | cubic           
    20 glamf        | degrees_east   | XY   | F |                                  | Longitude_F        | cubic          
    21 gphit        | degrees_north  | XY   | T |                                  | Latitude_T         | cubic          
    22 gphiu        | degrees_north  | XY   | U |                                  | Latitude_U         | cubic         
    23 gphiv        | degrees_north  | XY   | V |                                  | Latitude_V         | cubic         
    24 gphif        | degrees_north  | XY   | F |                                  | Latitude_F         | cubic         
    25 e1t          | m              | XY   | T |                                  |                    | cubic/rhoi     
    26 e1u          | m              | XY   | U |                                  |                    | cubic/rhoi      
    27 e1v          | m              | XY   | V |                                  |                    | cubic/rhoi       
    28 e1f          | m              | XY   | F |                                  |                    | cubic/rhoi     
    29 e2t          | m              | XY   | T |                                  |                    | cubic/rhoj       
    30 e2u          | m              | XY   | U |                                  |                    | cubic/rhoj       
    31 e2v          | m              | XY   | V |                                  |                    | cubic/rhoj      
    32 e2f          | m              | XY   | F |                                  |                    | cubic/rhoj       
    33 tmask        |                | XYZ  | T |                                  |                    | nearest        
    34 umask        |                | XYZ  | U |                                  |                    | nearest        
    35 vmask        |                | XYZ  | V |                                  |                    | nearest        
    36 fmask        |                | XYZ  | F |                                  |                    | nearest        
    37 weight       |                | XY   | T |                                  |                    |                
    38 kt           |                |      |   |                                  |                    |                
    39 ndastp       |                |      |   |                                  |                    |                
    40 adatrj       |                |      |   |                                  |                    |                
    41 kt           |                |      |   |                                  |                    |                
    42 rdt          |                |      |   |                                  |                    |                
    43 rdttra1      |                |      |   |                                  |                    |                
    44 utau_b       |                | XYT  | U |surface_downward_eastward_stress  |                    |                
    45 vtau_b       |                | XYT  | V |surface_downward_northward_stress |                    |                
    46 qns_b        |                | XYT  | T |                                  |                    |                
    47 emp_b        |                | XYT  | T |                                  |                    |                
    48 sfx_b        |                | XYT  | T |                                  |                    |                
    49 en           |                | XYZT | T |                                  |                    |                
    50 avt          |                | XYZT | T |                                  |                    |                
    51 avm          |                | XYZT | T |                                  |                    |                
    52 avmu         |                | XYZT | T |                                  |                    |                
    53 avmv         |                | XYZT | T |                                  |                    |                
    54 dissl        |                | XYZT | T |                                  |                    |                
    55 sbc_hc_b     |                | XYT  | T |                                  |                    |                
    56 sbc_sc_b     |                | XYT  | T |                                  |                    |                
    57 gcx          |                | XYT  | T |                                  |                    |                
    58 gcxb         |                | XYT  | T |                                  |                    |                
    59 ub           |                | XYZT | U |                                  |                    |                
    60 vb           |                | XYZT | V |                                  |                    |                
    61 tb           |                | XYZT | T |                                  |                    |                
    62 sb           |                | XYZT | T |                                  |                    |                
    63 rotb         |                | XYZT | T |                                  |                    |                
    64 hdivb        |                | XYZT | T |                                  |                    |                
    65 sshb         |                | XYT  | T |                                  |                    |                
    66 un           |                | XYZT | U |                                  |                    |                
    67 vn           |                | XYZT | V |                                  |                    |                
    68 tn           |                | XYZT | T |                                  |                    |                
    69 sn           |                | XYZT | T |                                  |                    |                
    70 rotn         |                | XYZT | T |                                  |                    |                
    71 hdivn        |                | XYZT | T |                                  |                    |                
    72 sshn         |                | XYT  | T |                                  |                    |                
    73 rhop         |                | XYZT | T |                                  |                    |                
     1# name       | units          | axis | pt| interpolation   | long name                             | standard name                                   
     2X            | unitless       | X    |   |                 |                                       | projection_x_coordinate                
     3Y            | unitless       | Y    |   |                 |                                       | projection_y_coordinate                
     4Z            | unitless       | Z    |   |                 |                                       | projection_z_coordinate                
     5T            | unitless       | T    |   |                 |                                       | projection_t_coordinate                
     6nav_lon      | degrees_east   | XY   | T | cubic           | Longitude                             | longitude                                    
     7nav_lat      | degrees_north  | XY   | T | cubic           | Latitude                              | latitude                          
     8nav_lev      | model_levels   | Z    | T | cubic           | Model levels                          |                                   
     9deptht       | m              | Z    | T |                 | Vertical T levels                     | depth                             
     10time_counter |                | T    |   |                 | Time axis                             | time                              
     11Bathymetry   | m              | XY   | T | cubic           | Bathymetry                            | bathymetry                        
     12votemper     | degree_Celsius | XYZT | T | cubic           | Temperature                           | sea_water_potential_temperature   
     13vozocrtx     | m s-1          | XYZT | U | cubic           | Zonal velocity                        |                                   
     14vomecrty     | m s-1          | XYZT | V | cubic           | Meridional velocity                   |                                   
     15vosaline     | PSU            | XYZT | T | cubic           | Salinity                              | sea_water_salinity                
     16sossheig     | m              | XYT  | T | cubic           | Sea Surface Height                    | sea_surface_height                
     17sotemper     | m              | XYT  | T | cubic           |                                       |                                   
     18sossheig     | m              | XYT  | T | cubic           |                                       |                                   
     19glamt        | degrees_east   | XY   | T | cubic           | Longitude_T                           |                                   
     20glamu        | degrees_east   | XY   | U | cubic           | Longitude_U                           |                                    
     21glamv        | degrees_east   | XY   | V | cubic           | Longitude_V                           |                                   
     22glamf        | degrees_east   | XY   | F | cubic           | Longitude_F                           |                                   
     23gphit        | degrees_north  | XY   | T | cubic           | Latitude_T                            |                                   
     24gphiu        | degrees_north  | XY   | U | cubic           | Latitude_U                            |                                   
     25gphiv        | degrees_north  | XY   | V | cubic           | Latitude_V                            |                                   
     26gphif        | degrees_north  | XY   | F | cubic           | Latitude_F                            |                                   
     27e1t          | m              | XY   | T | cubic/rhoi      |                                       |                                   
     28e1u          | m              | XY   | U | cubic/rhoi      |                                       |                                   
     29e1v          | m              | XY   | V | cubic/rhoi      |                                       |                                   
     30e1f          | m              | XY   | F | cubic/rhoi      |                                       |                                   
     31e2t          | m              | XY   | T | cubic/rhoj      |                                       |                                   
     32e2u          | m              | XY   | U | cubic/rhoj      |                                       |                                   
     33e2v          | m              | XY   | V | cubic/rhoj      |                                       |                                   
     34e2f          | m              | XY   | F | cubic/rhoj      |                                       |                                   
     35tmask        |                | XYZ  | T | nearest         |                                       |                                   
     36umask        |                | XYZ  | U | nearest         |                                       |                                   
     37vmask        |                | XYZ  | V | nearest         |                                       |                                   
     38fmask        |                | XYZ  | F | nearest         |                                       |                                   
     39weight       |                | XY   | T |                 |                                       |                                   
     40kt           |                |      |   |                 |                                       |                                   
     41ndastp       |                |      |   |                 |                                       |                                   
     42adatrj       |                |      |   |                 |                                       |                                   
     43kt           |                |      |   |                 |                                       |                                   
     44rdt          |                |      |   |                 |                                       |                                   
     45rdttra1      |                |      |   |                 |                                       |                                   
     46utau_b       |                | XY   | U |                 |                                       |surface_downward_eastward_stress   
     47vtau_b       |                | XY   | V |                 |                                       |surface_downward_northward_stress  
     48qns_b        |                | XY   | T |                 |                                       |                                   
     49emp_b        |                | XY   | T |                 |                                       |                                   
     50sfx_b        |                | XY   | T |                 |                                       |                                   
     51en           |                | XYZ  | T |                 |                                       |                                   
     52avt          |                | XYZ  | T |                 | vertical eddy diffusivity             |                                   
     53avm          |                | XYZ  | T |                 | vertical eddy viscosity               |                                   
     54avmu         |                | XYZ  | T |                 |                                       |                                   
     55avmv         |                | XYZ  | T |                 |                                       |                                   
     56dissl        |                | XYZ  | T |                 |                                       |                                   
     57sbc_hc_b     |                | XY   | T |                 |                                       |                                   
     58sbc_sc_b     |                | XY   | T |                 |                                       |                                   
     59gcx          |                | XY   | T |                 |                                       |                                   
     60gcxb         |                | XY   | T |                 |                                       |                                   
     61ub           |                | XYZ  | U |                 |                                       |                                   
     62vb           |                | XYZ  | V |                 |                                       |                                   
     63tb           |                | XYZ  | T |                 |                                       |                                   
     64sb           |                | XYZ  | T |                 |                                       |                                   
     65rotb         |                | XYZ  | T |                 |                                       |                                   
     66hdivb        |                | XYZ  | T |                 |                                       |                                   
     67sshb         |                | XY   | T |                 |                                       |                                   
     68un           |                | XYZ  | U |                 |                                       |                                   
     69vn           |                | XYZ  | V |                 |                                       |                                   
     70tn           |                | XYZ  | T |                 |                                       |                                   
     71sn           |                | XYZ  | T |                 |                                       |                                   
     72rotn         |                | XYZ  | T |                 |                                       |                                   
     73hdivn        |                | XYZ  | T |                 |                                       |                                   
     74sshn         |                | XYT  | T |                 |                                       |                                   
     75rhop         |                | XYZ  | T |                 |                                       |                                   
     76dic          |                | XYZT | T |                 | Dissolved Inorganic Carbon            | mole_concentration_of_dissolved_inorganic_caron_in_sea_water 
     77alkalini     |                | XYZT | T |                 | Total Alkalinity                      | sea_water_alkalinity_expressed_as_mole_equivalent 
     78o2           |                | XYZT | T |                 | Dissolved Oxygen                      | mole_concentration_of_dissolved_molecular_oxygen_in_sea_water 
     79caco3        |                | XYZT | T |                 | Calcite                               |                                   
     80po4          |                | XYZT | T |                 | Phosphate                             | mole_concentration_of_phosphate_in_sea_water 
     81poc          |                | XYZT | T |                 | Small Particulate Organic Carbon      |                                   
     82si           |                | XYZT | T |                 | Dissolved Silicate                    | mole_concentration_of_silicate_in_sea_water 
     83phy          |                | XYZT | T |                 | Nanophytoplankton                     |                                   
     84zoo          |                | XYZT | T |                 | Microzooplankton                      | mole_concentration_of_microzooplankton_expressed_as_carbon_in_sea_water 
     85doc          |                | XYZT | T |                 | Dissolved Organic Carbon              |                                   
     86phy2         |                | XYZT | T |                 | Diatoms                               |                                   
     87zoo2         |                | XYZT | T |                 | Mesozooplankton                       | mole_concentration_of_mesozooplankton_expressed_as_carbon_in_sea_water 
     88gsi          |                | XYZT | T |                 | Sinking biogenic Silica               |                                   
     89fer          |                | XYZT | T |                 | Dissolved Iron                        | mole_concentration_of_dissolved_iron_in_sea_water 
     90bfe          |                | XYZT | T |                 | Iron in the big particles             |                                   
     91goc          |                | XYZT | T |                 | Big Particulate Organic Carbon        |                                   
     92sfe          |                | XYZT | T |                 | Iron in the small particles           |                                   
     93dfe          |                | XYZT | T |                 | Iron content of the Diatoms           |                                   
     94dsi          |                | XYZT | T |                 | Silicon content of the Diatoms        |                                   
     95nfe          |                | XYZT | T |                 | Iron content of the Nanophytoplankton |                                   
     96nchl         |                | XYZT | T |                 | Chlorophyll of the Nanophytoplankton  |                                   
     97dchl         |                | XYZT | T |                 | Chlorophyll of the Diatoms            |                                   
     98no3          |                | XYZT | T |                 | Nitrate                               | mole_concentration_of_nitrate_in_sea_water 
     99nh4          |                | XYZT | T |                 | Ammonium                              | mole_concentration_of_ammonium_in_sea_water 
     100ppd          |                | XYZT | T |                 |                                       |                                   
     101ppn          |                | XYZT | T |                 |                                       |                                   
     102ph           |                | XYZT | T |                 |                                       |                                   
     103cflx         |                | XYZT | T |                 |                                       |                                   
     104oflx         |                | XYZT | T |                 |                                       |                                   
     105kg           |                | XYZT | T |                 |                                       |                                   
     106dpco2        |                | XYZT | T |                 |                                       |                                   
     107heup         |                | XYZT | T |                 |                                       |                                   
     108kz           |                | XYZT | T |                 |                                       |                                   
     109irondep      |                | XYZT | T |                 |                                       |                                   
     110kt_ice       |                |      |   |                 |                                       |                                   
     111hicif        |                |      |   |                 |                                       |                                   
     112hsnif        |                |      |   |                 |                                       |                                   
     113frld         |                |      |   |                 |                                       |                                   
     114sist         |                |      |   |                 |                                       |                                   
     115tbif1        |                |      |   |                 |                                       |                                   
     116tbif2        |                |      |   |                 |                                       |                                   
     117tbif3        |                |      |   |                 |                                       |                                   
     118ui_ice       |                |      |   |                 |                                       |                                   
     119vi_ice       |                |      |   |                 |                                       |                                   
     120qstoif       |                |      |   |                 |                                       |                                   
     121fsbbq        |                |      |   |                 |                                       |                                   
     122stress1_i    |                |      |   |                 |                                       |                                   
     123stress2_i    |                |      |   |                 |                                       |                                   
     124stress12_i   |                |      |   |                 |                                       |                                   
     125sxice        |                |      |   |                 |                                       |                                   
     126syice        |                |      |   |                 |                                       |                                   
     127sxxice       |                |      |   |                 |                                       |                                   
     128syyice       |                |      |   |                 |                                       |                                   
     129sxyice       |                |      |   |                 |                                       |                                   
     130sxsn         |                |      |   |                 |                                       |                                   
     131sysn         |                |      |   |                 |                                       |                                   
     132sxxsn        |                |      |   |                 |                                       |                                   
     133syysn        |                |      |   |                 |                                       |                                   
     134sxysn        |                |      |   |                 |                                       |                                   
     135sxa          |                |      |   |                 |                                       |                                   
     136sya          |                |      |   |                 |                                       |                                   
     137sxxa         |                |      |   |                 |                                       |                                   
     138syya         |                |      |   |                 |                                       |                                   
     139sxya         |                |      |   |                 |                                       |                                   
     140sxc0         |                |      |   |                 |                                       |                                   
     141syc0         |                |      |   |                 |                                       |                                   
     142sxxc0        |                |      |   |                 |                                       |                                   
     143syyc0        |                |      |   |                 |                                       |                                   
     144sxyc0        |                |      |   |                 |                                       |                                   
     145sxc1         |                |      |   |                 |                                       |                                   
     146syc1         |                |      |   |                 |                                       |                                   
     147sxxc1        |                |      |   |                 |                                       |                                   
     148syyc1        |                |      |   |                 |                                       |                                   
     149sxyc1        |                |      |   |                 |                                       |                                   
     150sxc2         |                |      |   |                 |                                       |                                   
     151syc2         |                |      |   |                 |                                       |                                   
     152sxxc2        |                |      |   |                 |                                       |                                   
     153syyc2        |                |      |   |                 |                                       |                                   
     154sxyc2        |                |      |   |                 |                                       |                                   
     155sxst         |                |      |   |                 |                                       |                                   
     156syst         |                |      |   |                 |                                       |                                   
     157sxxst        |                |      |   |                 |                                       |                                   
     158syyst        |                |      |   |                 |                                       |                                   
     159sxyst        |                |      |   |                 |                                       |                                   
  • branches/2015/dev_r5003_MERCATOR6_CRS/NEMOGCM/TOOLS/SIREN/src/attribute.f90

    r5602 r7261  
    8181! REVISION HISTORY: 
    8282!> @date November, 2013 - Initial Version 
    83 !> @date November, 2014 - Fix memory leaks bug 
     83!> @date November, 2014  
     84!> - Fix memory leaks bug 
     85!> @date September, 2015 
     86!> - manage useless (dummy) attributes 
    8487! 
    8588!> @note Software governed by the CeCILL licence     (NEMOGCM/NEMO_CeCILL.txt) 
     
    97100   PUBLIC :: TATT       !< attribute structure 
    98101 
     102   PRIVATE :: cm_dumatt !< dummy attribute array 
     103 
    99104   ! function and subroutine 
    100105   PUBLIC :: att_init       !< initialize attribute structure 
     
    104109   PUBLIC :: att_get_index  !< get attribute index, in an array of attribute structure 
    105110   PUBLIC :: att_get_id     !< get attribute id, read from file 
     111   PUBLIC :: att_get_dummy  !< fill dummy attribute array 
     112   PUBLIC :: att_is_dummy   !< check if attribute is defined as dummy attribute 
    106113 
    107114   PRIVATE :: att__clean_unit ! clean attribute strcuture 
     
    130137      INTEGER(i4)       :: i_type = 0        !< attribute type 
    131138      INTEGER(i4)       :: i_len  = 0        !< number of value store in attribute 
    132       CHARACTER(LEN=lc) :: c_value = "none"  !< attribute value if type CHAR 
     139      CHARACTER(LEN=lc) :: c_value = 'none'  !< attribute value if type CHAR 
    133140      REAL(dp), DIMENSION(:), POINTER :: d_value => NULL() !< attribute value if type SHORT,INT,FLOAT or DOUBLE 
    134141   END TYPE TATT 
    135142 
     143   CHARACTER(LEN=lc), DIMENSION(ip_maxdum), SAVE :: cm_dumatt !< dummy attribute 
     144 
    136145   INTERFACE att_init 
    137       MODULE PROCEDURE att__init_c 
     146      MODULE PROCEDURE att__init_c     
    138147      MODULE PROCEDURE att__init_dp 
    139148      MODULE PROCEDURE att__init_dp_0d 
     
    181190   !> @date November, 2013 - Initial Version 
    182191   !> @date November, 2014 
    183    !>    - use function instead of overload assignment operator  
     192   !> - use function instead of overload assignment operator  
    184193   !> (to avoid memory leak)  
    185194   ! 
     
    234243 
    235244      ! local variable 
    236       REAL(dp), DIMENSION(:), ALLOCATABLE :: dl_value 
     245      REAL(dp)         , DIMENSION(:), ALLOCATABLE :: dl_value 
    237246      !---------------------------------------------------------------- 
    238247 
     
    300309   !> @author J.Paul 
    301310   !> @date November, 2013 - Initial Version 
    302    !> @date September, 2014 - bug fix with use of id read from attribute structure 
    303    ! 
     311   !> @date September, 2014  
     312   !> - bug fix with use of id read from attribute structure 
     313   !> 
    304314   !> @param[in] td_att    array of attribute structure 
    305315   !> @param[in] cd_name   attribute name 
     
    355365 
    356366      att__init_c%c_name=TRIM(ADJUSTL(cd_name)) 
    357  
    358367      att__init_c%i_type=NF90_CHAR 
     368 
    359369      att__init_c%c_value=TRIM(ADJUSTL(cd_value)) 
    360370      att__init_c%i_len=LEN( TRIM(ADJUSTL(cd_value)) ) 
     
    368378   !> 
    369379   !> @author J.Paul 
    370    !> @dtae November, 2013 - Initial Version 
     380   !> @date November, 2013 - Initial Version 
    371381   ! 
    372382   !> @param[in] cd_name   attribute name 
     
    10681078   !> @author J.Paul 
    10691079   !> @date November, 2013 - Initial Version 
    1070    !> @date September, 2014 - take into account type of attribute. 
     1080   !> @date September, 2014  
     1081   !> - take into account type of attribute. 
    10711082   ! 
    10721083   !> @param[in] td_att attribute structure 
     
    11141125 
    11151126            CASE(NF90_CHAR) 
     1127 
    11161128               cl_value=td_att%c_value 
    11171129 
     
    12471259 
    12481260   END SUBROUTINE att__clean_arr 
     1261   !------------------------------------------------------------------- 
     1262   !> @brief This subroutine fill dummy attribute array 
     1263   ! 
     1264   !> @author J.Paul 
     1265   !> @date September, 2015 - Initial Version 
     1266   !> @date Marsh, 2016 
     1267   !> - close file (bugfix) 
     1268   ! 
     1269   !> @param[in] cd_dummy dummy configuration file 
     1270   !------------------------------------------------------------------- 
     1271   SUBROUTINE att_get_dummy( cd_dummy ) 
     1272      IMPLICIT NONE 
     1273      ! Argument 
     1274      CHARACTER(LEN=*), INTENT(IN) :: cd_dummy 
     1275 
     1276      ! local variable 
     1277      INTEGER(i4)   :: il_fileid 
     1278      INTEGER(i4)   :: il_status 
     1279 
     1280      LOGICAL       :: ll_exist 
     1281 
     1282      ! loop indices 
     1283      ! namelist 
     1284      CHARACTER(LEN=lc), DIMENSION(ip_maxdum) :: cn_dumvar 
     1285      CHARACTER(LEN=lc), DIMENSION(ip_maxdum) :: cn_dumdim 
     1286      CHARACTER(LEN=lc), DIMENSION(ip_maxdum) :: cn_dumatt 
     1287 
     1288      !---------------------------------------------------------------- 
     1289      NAMELIST /namdum/ &   !< dummy namelist 
     1290      &  cn_dumvar, &       !< variable  name 
     1291      &  cn_dumdim, &       !< dimension name 
     1292      &  cn_dumatt          !< attribute name 
     1293      !---------------------------------------------------------------- 
     1294 
     1295      ! init 
     1296      cm_dumatt(:)='' 
     1297 
     1298      ! read namelist 
     1299      INQUIRE(FILE=TRIM(cd_dummy), EXIST=ll_exist) 
     1300      IF( ll_exist )THEN 
     1301     
     1302         il_fileid=fct_getunit() 
     1303    
     1304         OPEN( il_fileid, FILE=TRIM(cd_dummy), & 
     1305         &                FORM='FORMATTED',       & 
     1306         &                ACCESS='SEQUENTIAL',    & 
     1307         &                STATUS='OLD',           & 
     1308         &                ACTION='READ',          & 
     1309         &                IOSTAT=il_status) 
     1310         CALL fct_err(il_status) 
     1311         IF( il_status /= 0 )THEN 
     1312            CALL logger_fatal("DIM GET DUMMY: opening "//TRIM(cd_dummy)) 
     1313         ENDIF 
     1314    
     1315         READ( il_fileid, NML = namdum ) 
     1316         cm_dumatt(:)=cn_dumatt(:) 
     1317 
     1318         CLOSE( il_fileid ) 
     1319 
     1320      ENDIF 
     1321    
     1322   END SUBROUTINE att_get_dummy 
     1323   !------------------------------------------------------------------- 
     1324   !> @brief This function check if attribute is defined as dummy attribute 
     1325   !> in configuraton file 
     1326   !> 
     1327   !> @author J.Paul 
     1328   !> @date September, 2015 - Initial Version 
     1329   ! 
     1330   !> @param[in] td_att attribute structure 
     1331   !> @return true if attribute is dummy attribute 
     1332   !------------------------------------------------------------------- 
     1333   FUNCTION att_is_dummy(td_att) 
     1334      IMPLICIT NONE 
     1335 
     1336      ! Argument       
     1337      TYPE(TATT), INTENT(IN) :: td_att 
     1338       
     1339      ! function 
     1340      LOGICAL :: att_is_dummy 
     1341       
     1342      ! loop indices 
     1343      INTEGER(i4) :: ji 
     1344      !---------------------------------------------------------------- 
     1345 
     1346      att_is_dummy=.FALSE. 
     1347      DO ji=1,ip_maxdum 
     1348         IF( fct_lower(td_att%c_name) == fct_lower(cm_dumatt(ji)) )THEN 
     1349            att_is_dummy=.TRUE. 
     1350            EXIT 
     1351         ENDIF 
     1352      ENDDO 
     1353 
     1354   END FUNCTION att_is_dummy 
    12491355END MODULE att 
    12501356 
  • branches/2015/dev_r5003_MERCATOR6_CRS/NEMOGCM/TOOLS/SIREN/src/boundary.f90

    r5602 r7261  
    2626!>       - ld_west  is logical to force used of north boundary [optional] 
    2727!>       - cd_north is string character description of north boundary [optional] 
    28 !>       - cd_south is string character description of north boundary [optional] 
    29 !>       - cd_east  is string character description of north boundary [optional] 
    30 !>       - cd_west  is string character description of north boundary [optional] 
     28!>       - cd_south is string character description of south boundary [optional] 
     29!>       - cd_east  is string character description of east boundary [optional] 
     30!>       - cd_west  is string character description of west boundary [optional] 
    3131!>       - ld_oneseg is logical to force to use only one segment for each boundary [optional] 
    3232!> 
     
    3636!>    to know if boundary is use:<br/> 
    3737!>    - tl_bdy\%l_use 
     38!> 
     39!>    to know if boundary come from namelist (cn_north,..):<br/> 
     40!>    - tl_bdy\%l_nam 
    3841!> 
    3942!>    to get the number of segment in boundary:<br/> 
     
    105108! REVISION HISTORY: 
    106109!> @date November, 2013 - Initial Version 
    107 !> @date September, 2014 - add boundary description 
    108 !> @date November, 2014 - Fix memory leaks bug 
     110!> @date September, 2014  
     111!> - add boundary description 
     112!> @date November, 2014  
     113!> - Fix memory leaks bug 
     114!> @date February, 2015  
     115!> - Do not change indices read from namelist 
     116!> - Change string character format of boundary read from namelist,  
     117!>  see boundary__get_info 
    109118!>  
    110119!> @todo add schematic to boundary structure description 
     
    157166   PRIVATE :: seg__init       ! initialise segment structure 
    158167   PRIVATE :: seg__clean      ! clean segment structure 
    159    PRIVATE :: seg__clean_unit ! clean segment structure 
     168   PRIVATE :: seg__clean_unit ! clean one segment structure 
    160169   PRIVATE :: seg__clean_arr  ! clean array of segment structure 
    161170   PRIVATE :: seg__copy       ! copy segment structure in another 
     
    173182      CHARACTER(LEN=lc) :: c_card = ''          !< boundary cardinal 
    174183      LOGICAL           :: l_use  = .FALSE.     !< boundary use or not  
     184      LOGICAL           :: l_nam  = .FALSE.     !< boundary get from namelist 
    175185      INTEGER(i4)       :: i_nseg = 0           !< number of segment in boundary 
    176186      TYPE(TSEG), DIMENSION(:), POINTER :: t_seg => NULL() !<  array of segment structure 
    177187   END TYPE TBDY 
    178188 
     189   ! module variable 
    179190   INTEGER(i4), PARAMETER :: im_width=10 
    180191 
     
    223234   !> @date November, 2013 - Initial Version 
    224235   !> @date November, 2014 
    225    !>    - use function instead of overload assignment operator  
     236   !> - use function instead of overload assignment operator  
    226237   !> (to avoid memory leak) 
    227238   ! 
     
    260271   !> @date November, 2013 - Initial Version 
    261272   !> @date November, 2014 
    262    !>    - use function instead of overload assignment operator  
     273   !> - use function instead of overload assignment operator  
    263274   !> (to avoid memory leak) 
    264275   ! 
     
    353364   END SUBROUTINE boundary__clean_arr 
    354365   !-------------------------------------------------------------------  
    355    !> @brief This function put cardinal name inside file name. 
     366   !> @brief This function put cardinal name and date inside file name. 
    356367   !  
    357368   !> @details  
    358    !  
     369   !>    Examples : 
     370   !>       cd_file="boundary.nc" 
     371   !>       cd_card="west"  
     372   !>       id_seg =2 
     373   !>       cd_date=y2015m07d16 
     374   !>  
     375   !>       function return "boundary_west_2_y2015m07d16.nc" 
     376   !>  
     377   !>       cd_file="boundary.nc" 
     378   !>       cd_card="west"  
     379   !>  
     380   !>       function return "boundary_west.nc" 
     381   !>  
    359382   !> @author J.Paul  
    360383   !> @date November, 2013 - Initial Version  
     
    385408      CHARACTER(LEN=lc) :: cl_date 
    386409      CHARACTER(LEN=lc) :: cl_name 
     410 
     411      INTEGER(i4)       :: il_ind 
     412      INTEGER(i4)       :: il_indend 
     413 
    387414      ! loop indices  
    388415      !----------------------------------------------------------------  
     
    400427         cl_suffix=fct_split(TRIM(cl_basename),2,'.') 
    401428          
     429         ! add segment number 
    402430         IF( PRESENT(id_seg) )THEN 
    403             cl_segnum="_"//TRIM(fct_str(id_seg))//"_" 
     431            cl_segnum="_"//TRIM(fct_str(id_seg)) 
    404432         ELSE 
    405433            cl_segnum="" 
    406434         ENDIF 
    407435 
     436         ! add date 
    408437         IF( PRESENT(cd_date) )THEN 
    409             cl_date=TRIM(ADJUSTL(cd_date)) 
     438            cl_date="_"//TRIM(ADJUSTL(cd_date)) 
    410439         ELSE 
    411440            cl_date="" 
    412441         ENDIF 
    413442 
    414          cl_name=TRIM(cl_base)//"_"//TRIM(cd_card)//TRIM(cl_segnum)//& 
    415          &        TRIM(cl_date)//"."//TRIM(cl_suffix) 
     443         ! special case for obcdta 
     444         il_ind=INDEX(cl_base,'_obcdta_') 
     445         IF( il_ind/=0 )THEN 
     446            il_ind=il_ind-1+8 
     447            il_indend=LEN_TRIM(cl_base) 
     448 
     449            cl_name=TRIM(cl_base(1:il_ind))//TRIM(cd_card)//& 
     450               &     TRIM(cl_segnum)//"_"//TRIM(cl_base(il_ind+1:il_indend))//& 
     451               &     TRIM(cl_date)//"."//TRIM(cl_suffix) 
     452         ELSE 
     453            cl_name=TRIM(cl_base)//"_"//TRIM(cd_card)//TRIM(cl_segnum)//& 
     454               &     TRIM(cl_date)//"."//TRIM(cl_suffix) 
     455         ENDIF 
    416456 
    417457         boundary_set_filename=TRIM(cl_dirname)//"/"//TRIM(cl_name) 
     
    442482   !> ex : cn_north='index1,first1,last1(width)|index2,first2,last2' 
    443483   !> 
    444    !> @note boundaries are compute on T point. change will be done to get data 
    445    !> on other point when need be.  
     484   !> @warn Boundaries are compute on T point, but expressed on U,V point. 
     485   !> change will be done to get data on other point when need be.  
    446486   !> 
    447487   !> @author J.Paul  
     
    581621 
    582622               ! get namelist information 
    583                tl_tmp=boundary__get_info(cl_card(jk)) 
     623               tl_tmp=boundary__get_info(cl_card(jk),jk) 
     624 
     625               ! get segments indices 
    584626               DO ji=1,tl_tmp%i_nseg 
    585627                  CALL boundary__add_seg(tl_bdy(jk),tl_tmp%t_seg(ji)) 
    586628               ENDDO 
     629               ! indices from namelist or not 
     630               tl_bdy(jk)%l_nam=tl_tmp%l_nam 
     631 
    587632               CALL boundary_clean(tl_tmp) 
    588633 
     
    642687   !> @return boundary structure 
    643688   !-------------------------------------------------------------------  
    644    FUNCTION boundary__init( cd_card, ld_use, td_seg )  
     689   FUNCTION boundary__init( cd_card, ld_use, ld_nam, td_seg )  
    645690      IMPLICIT NONE  
    646691      ! Argument 
    647692      CHARACTER(LEN=*), INTENT(IN) :: cd_card 
    648693      LOGICAL         , INTENT(IN), OPTIONAL :: ld_use  
     694      LOGICAL         , INTENT(IN), OPTIONAL :: ld_nam  
    649695      TYPE(TSEG)      , INTENT(IN), OPTIONAL :: td_seg 
    650696 
     
    664710            boundary__init%l_use=.TRUE. 
    665711            IF( PRESENT(ld_use) ) boundary__init%l_use=ld_use 
     712 
     713            boundary__init%l_nam=.FALSE. 
     714            IF( PRESENT(ld_nam) ) boundary__init%l_nam=ld_nam 
    666715 
    667716            IF( PRESENT(td_seg) )THEN 
     
    778827   !> orthogonal index, first and last indices, of each segment.  
    779828   !> And also the width of all segments of this boundary. 
    780    !>   cn_north='index1,first1,last1(width)|index2,first2,last2' 
     829   !>   cn_north='index1,first1:last1(width)|index2,first2:last2' 
    781830   !>  
    782831   !> @author J.Paul  
    783832   !> @date November, 2013 - Initial Version  
     833   !> @date february, 2015  
     834   !> - do not change indices read from namelist 
     835   !> - change format cn_north 
    784836   !  
    785837   !> @param[in] cd_card   boundary description 
     838   !> @param[in] id_jcard  boundary index 
    786839   !> @return boundary structure 
    787840   !-------------------------------------------------------------------  
    788    FUNCTION boundary__get_info(cd_card)  
     841   FUNCTION boundary__get_info(cd_card, id_jcard)  
    789842      IMPLICIT NONE  
    790843      ! Argument  
    791844      CHARACTER(LEN=lc), INTENT(IN) :: cd_card 
     845      INTEGER(i4)      , INTENT(IN) :: id_jcard 
    792846 
    793847      ! function  
     
    802856      CHARACTER(LEN=lc) :: cl_index 
    803857      CHARACTER(LEN=lc) :: cl_width 
     858      CHARACTER(LEN=lc) :: cl_tmp 
    804859      CHARACTER(LEN=lc) :: cl_first 
    805860      CHARACTER(LEN=lc) :: cl_last  
     
    818873      ! width should be the same for all segment of one boundary 
    819874      IF( TRIM(cl_seg)   /= '' )THEN 
     875 
     876         ! initialise boundary 
     877         ! temporaty boundary, so it doesn't matter which caridnal is used 
     878         boundary__get_info=boundary__init('north',ld_nam=.TRUE.) 
     879 
    820880         il_ind1=SCAN(fct_lower(cl_seg),'(') 
    821881         IF( il_ind1 /=0 )THEN 
     
    831891            ENDIF 
    832892         ENDIF 
     893 
    833894      ENDIF  
    834895 
     
    839900         il_ind1=SCAN(fct_lower(cl_index),'(') 
    840901         IF( il_ind1 /=0 )THEN 
    841             il_ind2=SCAN(fct_lower(cl_index),'(') 
     902            il_ind2=SCAN(fct_lower(cl_index),')') 
    842903            IF( il_ind2 /=0 )THEN 
    843904               cl_index=TRIM(cl_index(:il_ind1-1))//TRIM(cl_index(il_ind2+1:)) 
     
    848909         ENDIF 
    849910       
    850          cl_first=fct_split(cl_seg,2,',') 
     911          
     912         cl_tmp=fct_split(cl_seg,2,',') 
     913 
     914 
     915         cl_first=fct_split(cl_tmp,1,':') 
    851916         ! remove potential width information 
    852917         il_ind1=SCAN(fct_lower(cl_first),'(') 
    853918         IF( il_ind1 /=0 )THEN 
    854             il_ind2=SCAN(fct_lower(cl_first),'(') 
     919            il_ind2=SCAN(fct_lower(cl_first),')') 
    855920            IF( il_ind2 /=0 )THEN 
    856921               cl_first=TRIM(cl_first(:il_ind1-1))//TRIM(cl_first(il_ind2+1:)) 
     
    861926         ENDIF          
    862927          
    863          cl_last =fct_split(cl_seg,3,',') 
     928         cl_last =fct_split(cl_tmp,2,':') 
    864929         ! remove potential width information 
    865930         il_ind1=SCAN(fct_lower(cl_last),'(') 
    866931         IF( il_ind1 /=0 )THEN 
    867             il_ind2=SCAN(fct_lower(cl_last),'(') 
     932            il_ind2=SCAN(fct_lower(cl_last),')') 
    868933            IF( il_ind2 /=0 )THEN 
    869934               cl_last=TRIM(cl_last(:il_ind1-1))//TRIM(cl_last(il_ind2+1:)) 
     
    879944         IF( TRIM(cl_first) /= '' ) READ(cl_first,*) tl_seg%i_first 
    880945         IF( TRIM(cl_last)  /= '' ) READ(cl_last ,*) tl_seg%i_last 
     946 
     947         ! index expressed on U,V point, move on T point. 
     948         SELECT CASE(id_jcard) 
     949            CASE(jp_north, jp_east) 
     950               tl_seg%i_index=tl_seg%i_index+1 
     951         END SELECT 
    881952 
    882953         IF( (tl_seg%i_first == 0 .AND.  tl_seg%i_last == 0) .OR. & 
     
    9431014 
    9441015      DO jk=1,ip_ncard 
    945          IF( .NOT. td_bdy(jk)%l_use .OR. td_bdy(jk)%i_nseg > 1 )THEN 
     1016         IF( .NOT. td_bdy(jk)%l_use .OR. td_bdy(jk)%l_nam )THEN 
    9461017            ! nothing to be done 
    9471018         ELSE 
     
    14801551      il_max(jp_east )=td_var%t_dim(2)%i_len 
    14811552      il_max(jp_west )=td_var%t_dim(2)%i_len 
    1482        
     1553  
    14831554      il_maxindex(jp_north)=td_var%t_dim(2)%i_len-ip_ghost 
    14841555      il_maxindex(jp_south)=td_var%t_dim(2)%i_len-ip_ghost 
     
    15151586         ENDIF 
    15161587      ENDDO 
    1517        
     1588  
    15181589      CALL boundary_check_corner(td_bdy, td_var) 
    15191590 
     
    16501721   !> @date November, 2013 - Initial Version 
    16511722   !> @date November, 2014 
    1652    !>    - use function instead of overload assignment operator  
     1723   !> - use function instead of overload assignment operator  
    16531724   !> (to avoid memory leak) 
    16541725   ! 
     
    16871758   !> @date November, 2013 - Initial Version 
    16881759   !> @date November, 2014 
    1689    !>    - use function instead of overload assignment operator  
     1760   !> - use function instead of overload assignment operator  
    16901761   !> (to avoid memory leak) 
    16911762   ! 
  • branches/2015/dev_r5003_MERCATOR6_CRS/NEMOGCM/TOOLS/SIREN/src/create_bathy.f90

    r5602 r7261  
    88!> @file 
    99!> @brief  
    10 !> This program create fine grid bathymetry file. 
     10!> This program creates fine grid bathymetry file. 
    1111!> 
    1212!> @details 
     
    2020!>    ./SIREN/bin/create_bathy create_bathy.nam 
    2121!> @endcode 
    22 !>     
    23 !>    create_bathy.nam comprise 7 namelists:<br/> 
     22!> <br/>     
     23!> \image html  bathy_40.png  
     24!> \image latex bathy_30.png 
     25!> 
     26!> @note  
     27!>    you could find a template of the namelist in templates directory. 
     28!> 
     29!>    create_bathy.nam contains 7 namelists:<br/> 
    2430!>       - logger namelist (namlog) 
    2531!>       - config namelist (namcfg) 
     
    3036!>       - output namelist (namout) 
    3137!>     
    32 !>    @note  
    33 !>       All namelists have to be in file create_bathy.nam, however variables of 
    34 !>       those namelists are all optional. 
    35 !> 
    3638!>    * _logger namelist (namlog)_:<br/> 
    3739!>       - cn_logfile   : log filename 
    3840!>       - cn_verbosity : verbosity ('trace','debug','info', 
    39 !> 'warning','error','fatal') 
     41!> 'warning','error','fatal','none') 
    4042!>       - in_maxerror  : maximum number of error allowed 
    4143!> 
     
    4345!>       - cn_varcfg : variable configuration file  
    4446!> (see ./SIREN/cfg/variable.cfg) 
     47!>       - cn_dumcfg : useless (dummy) configuration file, for useless  
     48!> dimension or variable (see ./SIREN/cfg/dummy.cfg). 
    4549!> 
    4650!>    * _coarse grid namelist (namcrs)_:<br/> 
     
    5256!>       - cn_coord1 : coordinate file 
    5357!>       - in_perio1 : periodicity index 
    54 !>       - ln_fillclosed : fill closed sea or not 
     58!>       - ln_fillclosed : fill closed sea or not (default is .TRUE.) 
    5559!> 
    5660!>    * _variable namelist (namvar)_:<br/> 
    57 !>       - cn_varinfo : list of variable and extra information about request(s)  
    58 !>       to be used.<br/> 
    59 !>          each elements of *cn_varinfo* is a string character.<br/> 
    60 !>          it is composed of the variable name follow by ':',  
    61 !>          then request(s) to be used on this variable.<br/>  
    62 !>          request could be: 
    63 !>             - interpolation method 
    64 !>             - extrapolation method 
    65 !>             - filter method 
    66 !>             - > minimum value 
    67 !>             - < maximum value 
    68 !> 
    69 !>                requests must be separated by ';'.<br/> 
    70 !>                order of requests does not matter.<br/> 
    71 !> 
    72 !>          informations about available method could be find in @ref interp, 
    73 !>          @ref extrap and @ref filter modules.<br/> 
    74 !>          Example: 'Bathymetry: 2*hamming(2,3); > 0' 
    75 !>          @note  
    76 !>             If you do not specify a method which is required,  
    77 !>             default one is apply. 
    78 !>          @warning  
    79 !>             variable name must be __Bathymetry__ here. 
    8061!>       - cn_varfile : list of variable, and corresponding file.<br/>  
    8162!>          *cn_varfile* is the path and filename of the file where find 
     
    9071!>                - ',' for line 
    9172!>                - '/' for row 
    92 !>                - '\' for level<br/> 
    9373!>                Example:<br/> 
    9474!>                   3,2,3/1,4,5  =>  @f$ \left( \begin{array}{ccc} 
     
    10080!>             - 'Bathymetry:5000,5000,5000/5000,3000,5000/5000,5000,5000' 
    10181!> 
    102 !>          \image html  bathy_40.png  
    103 !>          \image latex bathy_30.png 
     82!>       - cn_varinfo : list of variable and extra information about request(s)  
     83!>       to be used.<br/> 
     84!>          each elements of *cn_varinfo* is a string character 
     85!>          (separated by ',').<br/> 
     86!>          it is composed of the variable name follow by ':',  
     87!>          then request(s) to be used on this variable.<br/>  
     88!>          request could be: 
     89!>             - int = interpolation method 
     90!>             - ext = extrapolation method 
     91!>             - flt = filter method 
     92!>             - min = minimum value 
     93!>             - max = maximum value 
     94!>             - unt = new units 
     95!>             - unf = unit scale factor (linked to new units) 
     96!> 
     97!>                requests must be separated by ';'.<br/> 
     98!>                order of requests does not matter.<br/> 
     99!> 
     100!>          informations about available method could be find in @ref interp, 
     101!>          @ref extrap and @ref filter modules.<br/> 
     102!>          Example: 'Bathymetry: flt=2*hamming(2,3); min=0' 
     103!>          @note  
     104!>             If you do not specify a method which is required,  
     105!>             default one is apply. 
     106!>          @warning  
     107!>             variable name must be __Bathymetry__ here. 
    104108!> 
    105109!>    * _nesting namelist (namnst)_:<br/> 
     
    119123!> - add header for user 
    120124!> - Bug fix, compute offset depending of grid point 
     125!> @date June, 2015 
     126!> - extrapolate all land points. 
     127!> - allow to change unit. 
     128!> @date September, 2015 
     129!> - manage useless (dummy) variable, attributes, and dimension 
     130!> @date January,2016 
     131!> - add create_bathy_check_depth as in create_boundary 
     132!> - add create_bathy_check_time  as in create_boundary 
     133!> @date February, 2016 
     134!> - do not closed sea for east-west cyclic domain 
    121135! 
     136!> @todo 
     137!> - check tl_multi is not empty 
     138!> 
    122139!> @note Software governed by the CeCILL licence     (NEMOGCM/NEMO_CeCILL.txt) 
    123140!---------------------------------------------------------------------- 
     
    154171   INTEGER(i4)                                        :: il_status 
    155172   INTEGER(i4)                                        :: il_fileid 
    156    INTEGER(i4)                                        :: il_varid 
    157173   INTEGER(i4)                                        :: il_attid 
    158174   INTEGER(i4)                                        :: il_imin0 
     
    166182 
    167183   LOGICAL                                            :: ll_exist 
     184   LOGICAL                                            :: ll_fillclosed 
    168185 
    169186   TYPE(TMPP)                                         :: tl_coord0 
     
    195212   ! namelist variable 
    196213   ! namlog 
    197    CHARACTER(LEN=lc) :: cn_logfile = 'create_bathy.log'  
    198    CHARACTER(LEN=lc) :: cn_verbosity = 'warning'  
    199    INTEGER(i4)       :: in_maxerror = 5 
     214   CHARACTER(LEN=lc)                       :: cn_logfile = 'create_bathy.log'  
     215   CHARACTER(LEN=lc)                       :: cn_verbosity = 'warning'  
     216   INTEGER(i4)                             :: in_maxerror = 5 
    200217 
    201218   ! namcfg 
    202    CHARACTER(LEN=lc) :: cn_varcfg = 'variable.cfg'  
     219   CHARACTER(LEN=lc)                       :: cn_varcfg = './cfg/variable.cfg'  
     220   CHARACTER(LEN=lc)                       :: cn_dumcfg = './cfg/dummy.cfg'  
    203221 
    204222   ! namcrs 
    205    CHARACTER(LEN=lc) :: cn_coord0 = ''  
    206    INTEGER(i4)       :: in_perio0 = -1 
     223   CHARACTER(LEN=lc)                       :: cn_coord0 = ''  
     224   INTEGER(i4)                             :: in_perio0 = -1 
    207225 
    208226   ! namfin 
    209    CHARACTER(LEN=lc) :: cn_coord1 = '' 
    210    INTEGER(i4)       :: in_perio1 = -1 
    211    LOGICAL           :: ln_fillclosed = .TRUE. 
     227   CHARACTER(LEN=lc)                       :: cn_coord1 = '' 
     228   INTEGER(i4)                             :: in_perio1 = -1 
     229   LOGICAL                                 :: ln_fillclosed = .TRUE. 
    212230 
    213231   ! namvar 
     232   CHARACTER(LEN=lc), DIMENSION(ip_maxvar) :: cn_varfile = '' 
    214233   CHARACTER(LEN=lc), DIMENSION(ip_maxvar) :: cn_varinfo = '' 
    215    CHARACTER(LEN=lc), DIMENSION(ip_maxvar) :: cn_varfile = '' 
    216234 
    217235   ! namnst 
    218    INTEGER(i4)       :: in_rhoi  = 1 
    219    INTEGER(i4)       :: in_rhoj  = 1 
     236   INTEGER(i4)                             :: in_rhoi  = 1 
     237   INTEGER(i4)                             :: in_rhoj  = 1 
    220238 
    221239   ! namout 
    222    CHARACTER(LEN=lc) :: cn_fileout = 'bathy_fine.nc'  
     240   CHARACTER(LEN=lc)                       :: cn_fileout = 'bathy_fine.nc'  
    223241   !------------------------------------------------------------------- 
    224242 
     
    229247 
    230248   NAMELIST /namcfg/ &   !< configuration namelist 
    231    &  cn_varcfg          !< variable configuration file 
     249   &  cn_varcfg, &       !< variable configuration file 
     250   &  cn_dumcfg          !< dummy configuration file 
    232251 
    233252   NAMELIST /namcrs/ &   !< coarse grid namelist 
     
    241260  
    242261   NAMELIST /namvar/ &   !< variable namelist 
    243    &  cn_varinfo, &      !< list of variable and interpolation method to be used. (ex: 'votemper:linear','vosaline:cubic' ) 
    244    &  cn_varfile         !< list of variable file 
     262   &  cn_varfile, &      !< list of variable file 
     263   &  cn_varinfo         !< list of variable and interpolation method to be used. (ex: 'votemper:linear','vosaline:cubic' ) 
    245264    
    246265   NAMELIST /namnst/ &   !< nesting namelist 
     
    289308      CALL var_def_extra(TRIM(cn_varcfg)) 
    290309 
     310      ! get dummy variable 
     311      CALL var_get_dummy(TRIM(cn_dumcfg)) 
     312      ! get dummy dimension 
     313      CALL dim_get_dummy(TRIM(cn_dumcfg)) 
     314      ! get dummy attribute 
     315      CALL att_get_dummy(TRIM(cn_dumcfg)) 
     316 
    291317      READ( il_fileid, NML = namcrs ) 
    292318      READ( il_fileid, NML = namfin ) 
     
    296322      ! match variable with file 
    297323      tl_multi=multi_init(cn_varfile) 
    298        
     324  
    299325      READ( il_fileid, NML = namnst ) 
    300326      READ( il_fileid, NML = namout ) 
     
    309335 
    310336      PRINT *,"ERROR in create_bathy: can't find "//TRIM(cl_namelist) 
     337      STOP 
    311338 
    312339   ENDIF 
     
    330357      &     "check namelist") 
    331358   ENDIF 
     359 
     360   ! do not closed sea for east-west cyclic domain 
     361   ll_fillclosed=ln_fillclosed 
     362   IF( tl_coord1%i_perio == 1 ) ll_fillclosed=.FALSE. 
    332363 
    333364   ! check 
     
    404435 
    405436            ! get or check depth value 
    406             IF( tl_multi%t_mpp(ji)%t_proc(1)%i_depthid /= 0 )THEN 
    407                il_varid=tl_multi%t_mpp(ji)%t_proc(1)%i_depthid 
    408                IF( ASSOCIATED(tl_depth%d_value) )THEN 
    409                   tl_tmp=iom_mpp_read_var(tl_mpp,il_varid) 
    410                   IF( ANY( tl_depth%d_value(:,:,:,:) /= & 
    411                   &        tl_tmp%d_value(:,:,:,:) ) )THEN 
    412                      CALL logger_fatal("CREATE BATHY: depth value from "//& 
    413                      &  TRIM(tl_multi%t_mpp(ji)%c_name)//" not conform "//& 
    414                      &  " to those from former file(s).") 
    415                   ENDIF 
    416                   CALL var_clean(tl_tmp) 
    417                ELSE 
    418                   tl_depth=iom_mpp_read_var(tl_mpp,il_varid) 
    419                ENDIF 
    420             ENDIF 
     437            CALL create_bathy_check_depth( tl_mpp, tl_depth ) 
    421438 
    422439            ! get or check time value 
    423             IF( tl_multi%t_mpp(ji)%t_proc(1)%i_timeid /= 0 )THEN 
    424                il_varid=tl_multi%t_mpp(ji)%t_proc(1)%i_timeid 
    425                IF( ASSOCIATED(tl_time%d_value) )THEN 
    426                   tl_tmp=iom_mpp_read_var(tl_mpp,il_varid) 
    427                   IF( ANY( tl_time%d_value(:,:,:,:) /= & 
    428                   &        tl_tmp%d_value(:,:,:,:) ) )THEN 
    429                      CALL logger_fatal("CREATE BATHY: time value from "//& 
    430                      &  TRIM(tl_multi%t_mpp(ji)%c_name)//" not conform "//& 
    431                      &  " to those from former file(s).") 
    432                   ENDIF 
    433                   CALL var_clean(tl_tmp) 
    434                ELSE 
    435                   tl_time=iom_mpp_read_var(tl_mpp,il_varid) 
    436                ENDIF 
    437             ENDIF 
     440            CALL create_bathy_check_time( tl_mpp, tl_time ) 
    438441 
    439442            ! close mpp file 
    440443            CALL iom_mpp_close(tl_mpp) 
    441444 
    442             IF( ANY( tl_mpp%t_dim(1:2)%i_len /= & 
    443             &        tl_coord0%t_dim(1:2)%i_len) )THEN 
     445            IF( ANY(tl_mpp%t_dim(1:2)%i_len /= tl_coord0%t_dim(1:2)%i_len).OR.& 
     446            &   ALL(il_rho(:)==1) )THEN 
    444447               !- extract bathymetry from fine grid bathymetry  
    445448               DO jj=1,tl_multi%t_mpp(ji)%t_proc(1)%i_nvar 
     
    482485   ENDIF 
    483486 
     487   ! use additional request 
    484488   DO jk=1,tl_multi%i_nvar 
     489 
     490         ! change unit and apply factor 
     491         CALL var_chg_unit(tl_var(jk)) 
     492 
    485493         ! forced min and max value 
    486494         CALL var_limit_value(tl_var(jk)) 
    487495 
    488496         ! fill closed sea 
    489          IF( ln_fillclosed )THEN 
     497         IF( ll_fillclosed )THEN 
    490498            ALLOCATE( il_mask(tl_var(jk)%t_dim(1)%i_len, & 
    491499            &                 tl_var(jk)%t_dim(2)%i_len) ) 
     
    508516         &   dl_minbat <= 0._dp  )THEN 
    509517            CALL logger_debug("CREATE BATHY: min value "//TRIM(fct_str(dl_minbat))) 
    510             CALL logger_error("CREATE BATHY: Bathymetry has value <= 0") 
     518            CALL logger_fatal("CREATE BATHY: Bathymetry has value <= 0") 
    511519         ENDIF 
    512520 
     
    557565 
    558566   ! add other variables 
    559    DO jk=1,tl_multi%i_nvar 
     567   DO jk=tl_multi%i_nvar,1,-1 
    560568      CALL file_add_var(tl_fileout, tl_var(jk)) 
    561569      CALL var_clean(tl_var(jk)) 
     
    623631   !> 
    624632   !> @author J.Paul 
    625    !> - November, 2013- Initial Version 
     633   !> @date November, 2013 - Initial Version 
    626634   !> 
    627635   !> @param[in] td_var    variable structure  
     
    759767   !>  
    760768   !> @author J.Paul 
    761    !> - November, 2013- Initial Version 
     769   !> @date November, 2013 - Initial Version 
    762770   !> 
    763771   !> @param[in] td_var    variable structure  
     
    878886   !>  
    879887   !> @author J.Paul 
    880    !> - November, 2013- Initial Version 
     888   !> @date November, 2013 - Initial Version 
    881889   !> 
    882890   !> @param[in] td_var    variable structure 
     
    897905      IMPLICIT NONE 
    898906      ! Argument 
    899       TYPE(TVAR) , INTENT(IN) :: td_var   
    900       TYPE(TMPP) , INTENT(IN) :: td_mpp  
    901       INTEGER(i4), INTENT(IN) :: id_imin 
    902       INTEGER(i4), INTENT(IN) :: id_imax 
    903       INTEGER(i4), INTENT(IN) :: id_jmin 
    904       INTEGER(i4), INTENT(IN) :: id_jmax 
     907      TYPE(TVAR)                 , INTENT(IN) :: td_var   
     908      TYPE(TMPP)                 , INTENT(IN) :: td_mpp  
     909      INTEGER(i4)                , INTENT(IN) :: id_imin 
     910      INTEGER(i4)                , INTENT(IN) :: id_imax 
     911      INTEGER(i4)                , INTENT(IN) :: id_jmin 
     912      INTEGER(i4)                , INTENT(IN) :: id_jmax 
    905913      INTEGER(i4), DIMENSION(:,:), INTENT(IN) :: id_offset 
    906914      INTEGER(i4), DIMENSION(:)  , INTENT(IN) :: id_rho 
     
    955963      CALL dom_del_extra( tl_var, tl_dom, il_rho(:) ) 
    956964 
     965      CALL dom_clean_extra( tl_dom ) 
     966 
    957967      !- add ghost cell 
    958968      CALL grid_add_ghost(tl_var,tl_dom%i_ghost(:,:)) 
     
    989999   !>  
    9901000   !> @author J.Paul 
    991    !> - November, 2013- Initial Version 
     1001   !> @date November, 2013 - Initial Version 
    9921002   !> 
    9931003   !> @param[inout] td_var variable structure  
     
    10731083 
    10741084      ! extrapolate variable 
    1075       CALL extrap_fill_value( td_var, id_offset=id_offset(:,:), & 
    1076       &                               id_rho=id_rho(:),         & 
    1077       &                               id_iext=il_iext, id_jext=il_jext ) 
     1085      CALL extrap_fill_value( td_var ) 
    10781086 
    10791087      ! interpolate Bathymetry 
     
    10931101 
    10941102   END SUBROUTINE create_bathy_interp 
     1103   !------------------------------------------------------------------- 
     1104   !> @brief 
     1105   !> This subroutine get depth variable value in an open mpp structure 
     1106   !> and check if agree with already input depth variable. 
     1107   !>  
     1108   !> @details  
     1109   !> 
     1110   !> @author J.Paul 
     1111   !> @date January, 2016 - Initial Version 
     1112   !> 
     1113   !> @param[in] td_mpp       mpp structure 
     1114   !> @param[inout] td_depth  depth variable structure  
     1115   !------------------------------------------------------------------- 
     1116   SUBROUTINE create_bathy_check_depth( td_mpp, td_depth ) 
     1117 
     1118      IMPLICIT NONE 
     1119 
     1120      ! Argument 
     1121      TYPE(TMPP) , INTENT(IN   ) :: td_mpp 
     1122      TYPE(TVAR) , INTENT(INOUT) :: td_depth 
     1123 
     1124      ! local variable 
     1125      INTEGER(i4) :: il_varid 
     1126      TYPE(TVAR)  :: tl_depth 
     1127      ! loop indices 
     1128      !---------------------------------------------------------------- 
     1129 
     1130      ! get or check depth value 
     1131      IF( td_mpp%t_proc(1)%i_depthid /= 0 )THEN 
     1132 
     1133         il_varid=td_mpp%t_proc(1)%i_depthid 
     1134         IF( ASSOCIATED(td_depth%d_value) )THEN 
     1135 
     1136            tl_depth=iom_mpp_read_var(td_mpp, il_varid) 
     1137 
     1138            IF( ANY( td_depth%d_value(:,:,:,:) /= & 
     1139            &        tl_depth%d_value(:,:,:,:) ) )THEN 
     1140 
     1141               CALL logger_warn("CREATE BATHY: depth value from "//& 
     1142               &  TRIM(td_mpp%c_name)//" not conform "//& 
     1143               &  " to those from former file(s).") 
     1144 
     1145            ENDIF 
     1146            CALL var_clean(tl_depth) 
     1147 
     1148         ELSE 
     1149            td_depth=iom_mpp_read_var(td_mpp,il_varid) 
     1150         ENDIF 
     1151 
     1152      ENDIF 
     1153       
     1154   END SUBROUTINE create_bathy_check_depth 
     1155   !------------------------------------------------------------------- 
     1156   !> @brief 
     1157   !> This subroutine get date and time in an open mpp structure 
     1158   !> and check if agree with date and time already read. 
     1159   !>  
     1160   !> @details  
     1161   !> 
     1162   !> @author J.Paul 
     1163   !> @date January, 2016 - Initial Version 
     1164   !> 
     1165   !> @param[in] td_mpp      mpp structure 
     1166   !> @param[inout] td_time  time variable structure  
     1167   !------------------------------------------------------------------- 
     1168   SUBROUTINE create_bathy_check_time( td_mpp, td_time ) 
     1169 
     1170      IMPLICIT NONE 
     1171 
     1172      ! Argument 
     1173      TYPE(TMPP), INTENT(IN   ) :: td_mpp 
     1174      TYPE(TVAR), INTENT(INOUT) :: td_time 
     1175 
     1176      ! local variable 
     1177      INTEGER(i4) :: il_varid 
     1178      TYPE(TVAR)  :: tl_time 
     1179 
     1180      TYPE(TDATE) :: tl_date1 
     1181      TYPE(TDATE) :: tl_date2 
     1182      ! loop indices 
     1183      !---------------------------------------------------------------- 
     1184 
     1185      ! get or check depth value 
     1186      IF( td_mpp%t_proc(1)%i_timeid /= 0 )THEN 
     1187 
     1188         il_varid=td_mpp%t_proc(1)%i_timeid 
     1189         IF( ASSOCIATED(td_time%d_value) )THEN 
     1190 
     1191            tl_time=iom_mpp_read_var(td_mpp, il_varid) 
     1192 
     1193            tl_date1=var_to_date(td_time) 
     1194            tl_date2=var_to_date(tl_time) 
     1195            IF( tl_date1 - tl_date2 /= 0 )THEN 
     1196 
     1197               CALL logger_warn("CREATE BATHY: date from "//& 
     1198               &  TRIM(td_mpp%c_name)//" not conform "//& 
     1199               &  " to those from former file(s).") 
     1200 
     1201            ENDIF 
     1202            CALL var_clean(tl_time) 
     1203 
     1204         ELSE 
     1205            td_time=iom_mpp_read_var(td_mpp,il_varid) 
     1206         ENDIF 
     1207 
     1208      ENDIF 
     1209       
     1210   END SUBROUTINE create_bathy_check_time 
    10951211END PROGRAM create_bathy 
  • branches/2015/dev_r5003_MERCATOR6_CRS/NEMOGCM/TOOLS/SIREN/src/create_coord.f90

    r5602 r7261  
    99!> @file 
    1010!> @brief  
    11 !> This program create fine grid coordinate file. 
     11!> This program creates fine grid coordinate file. 
    1212!> 
    1313!> @details 
     
    2424!> @endcode 
    2525!>     
    26 !>    create_coord.nam comprise 6 namelists:<br/> 
     26!> @note  
     27!>    you could find a template of the namelist in templates directory. 
     28!> 
     29!>    create_coord.nam contains 6 namelists:<br/> 
    2730!>       - logger namelist (namlog) 
    2831!>       - config namelist (namcfg) 
     
    3235!>       - output namelist (namout) 
    3336!>     
    34 !>    @note  
    35 !>       All namelists have to be in file create_coord.nam,  
    36 !>       however variables of those namelists are all optional. 
    37 !> 
    3837!>    * _logger namelist (namlog)_:<br/> 
    3938!>       - cn_logfile   : log filename 
    4039!>       - cn_verbosity : verbosity ('trace','debug','info', 
    41 !> 'warning','error','fatal') 
     40!> 'warning','error','fatal','none') 
    4241!>       - in_maxerror  : maximum number of error allowed 
    4342!> 
     
    4544!>       - cn_varcfg : variable configuration file  
    4645!> (see ./SIREN/cfg/variable.cfg) 
     46!>       - cn_dumcfg : useless (dummy) configuration file, for useless  
     47!> dimension or variable (see ./SIREN/cfg/dummy.cfg). 
    4748!> 
    4849!>    * _coarse grid namelist (namcrs)_:<br/> 
     
    5455!>       - cn_varinfo : list of variable and extra information about request(s) 
    5556!> to be used.<br/> 
    56 !>          each elements of *cn_varinfo* is a string character.<br/> 
     57!>          each elements of *cn_varinfo* is a string character  
     58!>          (separated by ',').<br/> 
    5759!>          it is composed of the variable name follow by ':',  
    5860!>          then request(s) to be used on this variable.<br/>  
    5961!>          request could be: 
    60 !>             - interpolation method 
    61 !>             - extrapolation method 
    62 !>             - filter method 
     62!>             - int = interpolation method 
     63!>             - ext = extrapolation method 
    6364!>  
    6465!>                requests must be separated by ';' .<br/> 
     
    6869!>          @ref extrap and @ref filter modules.<br/> 
    6970!> 
    70 !>          Example: 'votemper: linear; hann(2,3); dist_weight',  
    71 !>          'vosaline: cubic'<br/> 
     71!>          Example: 'glamt: int=linear; ext=dist_weight',  
     72!>          'e1t: int=cubic/rhoi'<br/> 
    7273!>          @note  
    7374!>             If you do not specify a method which is required,  
     
    9091!> 
    9192!>    * _output namelist (namout)_: 
    92 !>       - cn_fileout : output coordinate file 
     93!>       - cn_fileout : output coordinate file name 
    9394!> 
    9495!> @author J.Paul 
     
    99100!> - compute offset considering grid point 
    100101!> - add global attributes in output file 
     102!> @date September, 2015 
     103!> - manage useless (dummy) variable, attributes, and dimension 
    101104!> 
    102105!> @note Software governed by the CeCILL licence     (NEMOGCM/NEMO_CeCILL.txt) 
     
    152155   TYPE(TFILE)                                          :: tl_fileout 
    153156 
    154    ! check  
    155 !   INTEGER(i4)                                          :: il_imin0 
    156 !   INTEGER(i4)                                          :: il_imax0 
    157 !   INTEGER(i4)                                          :: il_jmin0 
    158 !   INTEGER(i4)                                          :: il_jmax0 
    159 !   INTEGER(i4)      , DIMENSION(2,2)                    :: il_ind2 
    160 !   TYPE(TMPP)                                           :: tl_mppout 
    161  
    162157   ! loop indices 
    163158   INTEGER(i4) :: ji 
     
    165160 
    166161   ! namelist variable 
     162   ! namlog 
    167163   CHARACTER(LEN=lc) :: cn_logfile = 'create_coord.log'  
    168164   CHARACTER(LEN=lc) :: cn_verbosity = 'warning'  
    169165   INTEGER(i4)       :: in_maxerror = 5 
    170166 
     167   ! namcfg 
     168   CHARACTER(LEN=lc) :: cn_varcfg = './cfg/variable.cfg'  
     169   CHARACTER(LEN=lc) :: cn_dumcfg = './cfg/dummy.cfg' 
     170 
     171   ! namcrs 
    171172   CHARACTER(LEN=lc) :: cn_coord0 = ''  
    172173   INTEGER(i4)       :: in_perio0 = -1 
    173174 
    174    CHARACTER(LEN=lc) :: cn_varcfg = '../cfg/variable.cfg'  
    175  
     175   ! namvar 
    176176   CHARACTER(LEN=lc), DIMENSION(ip_maxvar) :: cn_varinfo = '' 
    177177 
     178   !namnst 
    178179   INTEGER(i4)       :: in_imin0 = 0 
    179180   INTEGER(i4)       :: in_imax0 = 0 
     
    183184   INTEGER(i4)       :: in_rhoj  = 1 
    184185 
     186   !namout 
    185187   CHARACTER(LEN=lc) :: cn_fileout= 'coord_fine.nc' 
    186188   !------------------------------------------------------------------- 
     
    192194 
    193195   NAMELIST /namcfg/ &  !  config namelist 
    194    &  cn_varcfg         !< variable configuration file 
     196   &  cn_varcfg, &       !< variable configuration file 
     197   &  cn_dumcfg          !< dummy configuration file 
    195198 
    196199   NAMELIST /namcrs/ &  !  coarse grid namelist 
     
    252255      CALL var_def_extra(TRIM(cn_varcfg)) 
    253256 
     257      ! get dummy variable 
     258      CALL var_get_dummy(TRIM(cn_dumcfg)) 
     259      ! get dummy dimension 
     260      CALL dim_get_dummy(TRIM(cn_dumcfg)) 
     261      ! get dummy attribute 
     262      CALL att_get_dummy(TRIM(cn_dumcfg)) 
     263 
    254264      READ( il_fileid, NML = namcrs ) 
    255265      READ( il_fileid, NML = namvar ) 
     
    305315 
    306316      il_offset(:,:,:)=create_coord_get_offset(il_rho(:)) 
    307  
    308317   ENDIF 
    309318 
     
    348357      CALL dom_del_extra( tl_var(ji), tl_dom, il_rho(:), .true. ) 
    349358 
    350       ! do not add ghost cell.  
    351       ! ghost cell already replace by value for coordinates  
    352       ! CALL grid_add_ghost(tl_var(ji),tl_dom%i_ghost(:,:)) 
    353  
    354359      ! filter 
    355360      CALL filter_fill_value(tl_var(ji))       
    356361 
    357362   ENDDO 
     363 
     364   ! clean 
     365   CALL dom_clean_extra( tl_dom ) 
    358366 
    359367   ! close mpp files 
     
    375383 
    376384   ! add variables 
    377    DO ji=1,il_nvar 
     385   DO ji=il_nvar,1,-1 
    378386      CALL file_add_var(tl_fileout, tl_var(ji)) 
     387      CALL var_clean(tl_var(ji)) 
    379388   ENDDO 
    380  
    381    ! recompute some attribute 
    382389 
    383390   ! add some attribute 
     
    392399   CALL file_add_att(tl_fileout, tl_att)    
    393400 
    394    tl_att=att_init("src_i_indices",(/in_imin0,in_imax0/)) 
     401   tl_att=att_init("src_i_indices",(/tl_dom%i_imin,tl_dom%i_imax/)) 
    395402   CALL file_add_att(tl_fileout, tl_att)    
    396    tl_att=att_init("src_j_indices",(/in_jmin0,in_jmax0/)) 
     403   tl_att=att_init("src_j_indices",(/tl_dom%i_jmin,tl_dom%i_jmax/)) 
    397404   CALL file_add_att(tl_fileout, tl_att) 
    398405   IF( .NOT. ALL(il_rho(:)==1) )THEN 
     
    440447 
    441448   CALL file_clean(tl_fileout) 
    442  
    443 !   ! check domain 
    444 !   tl_coord0=mpp_init( file_init(TRIM(cn_coord0)), id_perio=in_perio0) 
    445 !   tl_mppout=mpp_init( file_init(TRIM(cn_fileout)) ) 
    446 !   CALL grid_get_info(tl_coord0) 
    447 !   CALL iom_mpp_open(tl_mppout) 
    448 ! 
    449 !   il_ind2(:,:)=grid_get_coarse_index( tl_coord0, tl_mppout, & 
    450 !   &                                   id_rho=il_rho(:) ) 
    451 ! 
    452 !   il_imin0=il_ind2(1,1) ; il_imax0=il_ind2(1,2) 
    453 !   il_jmin0=il_ind2(2,1) ; il_jmax0=il_ind2(2,2) 
    454 ! 
    455 !   IF( il_imin0 /= in_imin0 .OR. & 
    456 !   &   il_imax0 /= in_imax0 .OR. & 
    457 !   &   il_jmin0 /= in_jmin0 .OR. & 
    458 !   &   il_jmax0 /= in_jmax0 )THEN 
    459 !      CALL logger_debug("CREATE COORD: output indices ("//& 
    460 !      &                 TRIM(fct_str(il_imin0))//","//& 
    461 !      &                 TRIM(fct_str(il_imax0))//") ("//& 
    462 !      &                 TRIM(fct_str(il_jmin0))//","//& 
    463 !      &                 TRIM(fct_str(il_jmax0))//")" )  
    464 !      CALL logger_debug("CREATE COORD: input indices ("//& 
    465 !      &                 TRIM(fct_str(in_imin0))//","//& 
    466 !      &                 TRIM(fct_str(in_imax0))//") ("//& 
    467 !      &                 TRIM(fct_str(in_jmin0))//","//& 
    468 !      &                 TRIM(fct_str(in_jmax0))//")" )  
    469 !      CALL logger_fatal("CREATE COORD: output domain not confrom "//& 
    470 !      &                 "with input indices") 
    471 !   ENDIF 
    472 ! 
    473 !   CALL iom_mpp_close(tl_coord0) 
    474 !   CALL iom_mpp_close(tl_mppout) 
    475449 
    476450   ! close log file 
     
    539513   !> @param[in] id_iext   number of points to be extrapolated in i-direction 
    540514   !> @param[in] id_jext   number of points to be extrapolated in j-direction 
     515   !> 
     516   !> @todo check if mask is really needed 
    541517   !------------------------------------------------------------------- 
    542518   SUBROUTINE create_coord_interp( td_var,          & 
     
    626602 
    627603         ! extrapolate variable 
    628          CALL extrap_fill_value( td_var, id_iext=il_iext, id_jext=il_jext ) 
     604         CALL extrap_fill_value( td_var ) 
    629605 
    630606         ! interpolate variable 
  • branches/2015/dev_r5003_MERCATOR6_CRS/NEMOGCM/TOOLS/SIREN/src/create_restart.f90

    r5602 r7261  
    99!> @file 
    1010!> @brief  
    11 !> This program create restart file. 
     11!> This program creates restart file. 
    1212!> 
    1313!> @details 
    1414!> @section sec1 method 
    1515!> Variables could be extracted from fine grid file, interpolated from coarse 
    16 !> grid file or restart file, or manually written.<br/>  
    17 !> Then they are split over new decomposition.  
     16!> grid file or restart file. Variables could also be manually written.<br/>  
     17!> Then they are split over new layout.  
    1818!> @note  
    1919!>    method could be different for each variable. 
     
    2525!> @endcode 
    2626!>     
    27 !>    create_restart.nam comprise 9 namelists:<br/> 
     27!> @note  
     28!>    you could find a template of the namelist in templates directory. 
     29!> 
     30!>    create_restart.nam contains 9 namelists:<br/> 
    2831!>       - logger namelist (namlog) 
    2932!>       - config namelist (namcfg) 
     
    3639!>       - output namelist (namout) 
    3740!>     
    38 !>    @note  
    39 !>       All namelists have to be in file create_restart.nam  
    40 !>       however variables of those namelists are all optional. 
    41 !> 
    4241!>    * _logger namelist (namlog)_:<br/> 
    4342!>       - cn_logfile   : log filename 
    4443!>       - cn_verbosity : verbosity ('trace','debug','info', 
    45 !> 'warning','error','fatal') 
     44!> 'warning','error','fatal','none') 
    4645!>       - in_maxerror  : maximum number of error allowed 
    4746!> 
     
    4948!>       - cn_varcfg : variable configuration file 
    5049!> (see ./SIREN/cfg/variable.cfg) 
     50!>       - cn_dumcfg : useless (dummy) configuration file, for useless  
     51!> dimension or variable (see ./SIREN/cfg/dummy.cfg). 
    5152!> 
    5253!>    * _coarse grid namelist (namcrs):<br/> 
     
    5960!>       - cn_bathy1 : bathymetry file 
    6061!>       - in_perio1 : NEMO periodicity index 
    61 !>       - in_extrap : number of land point to be extrapolated  
    62 !>       before writing file 
    6362!> 
    6463!>    * _vertical grid namelist (namzgr)_:<br/> 
     
    8180!> 
    8281!>    * _variable namelist (namvar)_:<br/> 
    83 !>       - cn_varinfo : list of variable and extra information about request(s)  
    84 !>       to be used.<br/> 
    85 !>          each elements of *cn_varinfo* is a string character.<br/> 
    86 !>          it is composed of the variable name follow by ':',  
    87 !>          then request(s) to be used on this variable.<br/>  
    88 !>          request could be: 
    89 !>             - interpolation method 
    90 !>             - extrapolation method 
    91 !>             - filter method 
    92 !>             - > minimum value 
    93 !>             - < maximum value 
    94 !> 
    95 !>             requests must be separated by ';'.<br/> 
    96 !>             order of requests does not matter.<br/> 
    97 !> 
    98 !>          informations about available method could be find in @ref interp, 
    99 !>          @ref extrap and @ref filter.<br/> 
    100 !>          Example: 'votemper: linear; hann; dist_weight','vosaline: cubic' 
    101 !>          @note  
    102 !>             If you do not specify a method which is required,  
    103 !>             default one is apply. 
    104 !>       - cn_varfile : list of variable, and corresponding file<br/>  
     82!>       - cn_varfile : list of variable, and associated file<br/>  
    10583!>          *cn_varfile* is the path and filename of the file where find 
    10684!>          variable.<br/> 
     
    127105!>             - 'all:restart.dimg' 
    128106!> 
     107!>       - cn_varinfo : list of variable and extra information about request(s)  
     108!>       to be used.<br/> 
     109!>          each elements of *cn_varinfo* is a string character 
     110!>          (separated by ',').<br/> 
     111!>          it is composed of the variable name follow by ':',  
     112!>          then request(s) to be used on this variable.<br/>  
     113!>          request could be: 
     114!>             - int = interpolation method 
     115!>             - ext = extrapolation method 
     116!>             - flt = filter method 
     117!>             - min = minimum value 
     118!>             - max = maximum value 
     119!>             - unt = new units 
     120!>             - unf = unit scale factor (linked to new units) 
     121!> 
     122!>             requests must be separated by ';'.<br/> 
     123!>             order of requests does not matter.<br/> 
     124!> 
     125!>          informations about available method could be find in @ref interp, 
     126!>          @ref extrap and @ref filter.<br/> 
     127!>          Example: 'votemper: int=linear; flt=hann; ext=dist_weight', 
     128!>                   'vosaline: int=cubic' 
     129!>          @note  
     130!>             If you do not specify a method which is required,  
     131!>             default one is apply. 
     132!> 
    129133!>    * _nesting namelist (namnst)_:<br/> 
    130134!>       - in_rhoi  : refinement factor in i-direction 
    131135!>       - in_rhoj  : refinement factor in j-direction 
    132136!>       @note  
    133 !>          coarse grid indices will be deduced from fine grid 
     137!>          coarse grid indices will be computed from fine grid 
    134138!>          coordinate file. 
    135139!> 
    136140!>    * _output namelist (namout)_:<br/> 
    137141!>       - cn_fileout : output file 
     142!>       - ln_extrap : extrapolate land point or not 
     143!>       - in_niproc : number of processor in i-direction 
     144!>       - in_njproc : number of processor in j-direction 
    138145!>       - in_nproc  : total number of processor to be used 
    139 !>       - in_niproc : i-direction number of processor 
    140 !>       - in_njproc : j-direction numebr of processor 
    141146!>       - cn_type   : output format ('dimg', 'cdf') 
    142147!> 
     
    148153!> - offset computed considering grid point 
    149154!> - add attributes in output variable 
     155!> @date June, 2015 
     156!> - extrapolate all land points, and add ln_extrap in namelist. 
     157!> - allow to change unit. 
     158!> @date September, 2015 
     159!> - manage useless (dummy) variable, attributes, and dimension 
    150160!> 
    151161!> @note Software governed by the CeCILL licence     (NEMOGCM/NEMO_CeCILL.txt) 
     
    176186   IMPLICIT NONE 
    177187 
    178  
    179188   ! local variable 
    180189   CHARACTER(LEN=lc)                                  :: cl_namelist 
     
    204213 
    205214   LOGICAL                                            :: ll_exist 
     215   LOGICAL                                            :: ll_sameGrid 
    206216 
    207217   TYPE(TDOM)                                         :: tl_dom1 
     
    234244   ! namelist variable 
    235245   ! namlog 
    236    CHARACTER(LEN=lc) :: cn_logfile = 'create_restart.log'  
    237    CHARACTER(LEN=lc) :: cn_verbosity = 'warning'  
    238    INTEGER(i4)       :: in_maxerror = 5 
     246   CHARACTER(LEN=lc)                       :: cn_logfile = 'create_restart.log'  
     247   CHARACTER(LEN=lc)                       :: cn_verbosity = 'warning'  
     248   INTEGER(i4)                             :: in_maxerror = 5 
    239249 
    240250   ! namcfg 
    241    CHARACTER(LEN=lc) :: cn_varcfg = 'variable.cfg'  
     251   CHARACTER(LEN=lc)                       :: cn_varcfg = 'variable.cfg'  
     252   CHARACTER(LEN=lc)                       :: cn_dumcfg = 'dummy.cfg' 
    242253 
    243254   ! namcrs 
    244    CHARACTER(LEN=lc) :: cn_coord0 = ''  
    245    INTEGER(i4)       :: in_perio0 = -1 
     255   CHARACTER(LEN=lc)                       :: cn_coord0 = ''  
     256   INTEGER(i4)                             :: in_perio0 = -1 
    246257 
    247258   ! namfin 
    248    CHARACTER(LEN=lc) :: cn_coord1 = '' 
    249    CHARACTER(LEN=lc) :: cn_bathy1 = '' 
    250    INTEGER(i4)       :: in_perio1 = -1 
    251    INTEGER(i4)       :: in_extrap = 0 
     259   CHARACTER(LEN=lc)                       :: cn_coord1 = '' 
     260   CHARACTER(LEN=lc)                       :: cn_bathy1 = '' 
     261   INTEGER(i4)                             :: in_perio1 = -1 
    252262 
    253263   !namzgr 
    254    REAL(dp)          :: dn_pp_to_be_computed = 0._dp 
    255    REAL(dp)          :: dn_ppsur     = -3958.951371276829_dp 
    256    REAL(dp)          :: dn_ppa0      =   103.9530096000000_dp 
    257    REAL(dp)          :: dn_ppa1      =     2.4159512690000_dp 
    258    REAL(dp)          :: dn_ppa2      =   100.7609285000000_dp 
    259    REAL(dp)          :: dn_ppkth     =    15.3510137000000_dp 
    260    REAL(dp)          :: dn_ppkth2    =    48.0298937200000_dp 
    261    REAL(dp)          :: dn_ppacr     =     7.0000000000000_dp 
    262    REAL(dp)          :: dn_ppacr2    =    13.000000000000_dp 
    263    REAL(dp)          :: dn_ppdzmin  = 6._dp 
    264    REAL(dp)          :: dn_pphmax    = 5750._dp 
    265    INTEGER(i4)       :: in_nlevel    = 75 
     264   REAL(dp)                                :: dn_pp_to_be_computed = 0._dp 
     265   REAL(dp)                                :: dn_ppsur   = -3958.951371276829_dp 
     266   REAL(dp)                                :: dn_ppa0    =   103.953009600000_dp 
     267   REAL(dp)                                :: dn_ppa1    =     2.415951269000_dp 
     268   REAL(dp)                                :: dn_ppa2    =   100.760928500000_dp 
     269   REAL(dp)                                :: dn_ppkth   =    15.351013700000_dp 
     270   REAL(dp)                                :: dn_ppkth2  =    48.029893720000_dp 
     271   REAL(dp)                                :: dn_ppacr   =     7.000000000000_dp 
     272   REAL(dp)                                :: dn_ppacr2  =    13.000000000000_dp 
     273   REAL(dp)                                :: dn_ppdzmin = 6._dp 
     274   REAL(dp)                                :: dn_pphmax  = 5750._dp 
     275   INTEGER(i4)                             :: in_nlevel  = 75 
    266276 
    267277   !namzps 
    268    REAL(dp)          :: dn_e3zps_min = 25._dp 
    269    REAL(dp)          :: dn_e3zps_rat = 0.2_dp 
     278   REAL(dp)                                :: dn_e3zps_min = 25._dp 
     279   REAL(dp)                                :: dn_e3zps_rat = 0.2_dp 
    270280 
    271281   ! namvar 
     282   CHARACTER(LEN=lc), DIMENSION(ip_maxvar) :: cn_varfile = '' 
    272283   CHARACTER(LEN=lc), DIMENSION(ip_maxvar) :: cn_varinfo = '' 
    273    CHARACTER(LEN=lc), DIMENSION(ip_maxvar) :: cn_varfile = '' 
    274284 
    275285   ! namnst 
    276    INTEGER(i4)       :: in_rhoi = 0 
    277    INTEGER(i4)       :: in_rhoj = 0 
     286   INTEGER(i4)                             :: in_rhoi = 0 
     287   INTEGER(i4)                             :: in_rhoj = 0 
    278288 
    279289   ! namout 
    280    CHARACTER(LEN=lc) :: cn_fileout = 'restart.nc'  
    281    INTEGER(i4)       :: in_nproc   = 0 
    282    INTEGER(i4)       :: in_niproc  = 0 
    283    INTEGER(i4)       :: in_njproc  = 0 
    284    CHARACTER(LEN=lc) :: cn_type    = '' 
     290   CHARACTER(LEN=lc)                       :: cn_fileout = 'restart.nc'  
     291   LOGICAL                                 :: ln_extrap  = .FALSE. 
     292   INTEGER(i4)                             :: in_nproc   = 0 
     293   INTEGER(i4)                             :: in_niproc  = 0 
     294   INTEGER(i4)                             :: in_njproc  = 0 
     295   CHARACTER(LEN=lc)                       :: cn_type    = '' 
    285296 
    286297   !------------------------------------------------------------------- 
     
    292303 
    293304   NAMELIST /namcfg/ &  !< configuration namelist 
    294    &  cn_varcfg         !< variable configuration file 
     305   &  cn_varcfg, &      !< variable configuration file 
     306   &  cn_dumcfg         !< dummy configuration file 
    295307 
    296308   NAMELIST /namcrs/ &  !< coarse grid namelist 
     
    301313   &  cn_coord1,   &    !< coordinate file 
    302314   &  cn_bathy1,   &    !< bathymetry file 
    303    &  in_perio1,   &    !< periodicity index 
    304    &  in_extrap 
     315   &  in_perio1         !< periodicity index 
    305316  
    306317   NAMELIST /namzgr/ & 
     
    323334 
    324335   NAMELIST /namvar/ &  !< variable namelist 
    325    &  cn_varinfo, &     !< list of variable and interpolation method to be used. 
    326    &  cn_varfile        !< list of variable file 
     336   &  cn_varfile, &     !< list of variable file 
     337   &  cn_varinfo        !< list of variable and interpolation method to be used. 
    327338    
    328339   NAMELIST /namnst/ &  !< nesting namelist 
     
    332343   NAMELIST /namout/ &  !< output namlist 
    333344   &  cn_fileout, &     !< fine grid bathymetry file 
    334    &  in_nproc,   &     !< number of processor to be used 
     345   &  ln_extrap,  &     !< extrapolate or not 
    335346   &  in_niproc,  &     !< i-direction number of processor 
    336347   &  in_njproc,  &     !< j-direction numebr of processor 
     348   &  in_nproc,   &     !< number of processor to be used 
    337349   &  cn_type           !< output type format (dimg, cdf) 
    338350   !------------------------------------------------------------------- 
     
    347359      CALL GET_COMMAND_ARGUMENT(1,cl_namelist) !f03 intrinsec 
    348360   ENDIF 
    349     
     361 
    350362   ! read namelist 
    351363   INQUIRE(FILE=TRIM(cl_namelist), EXIST=ll_exist) 
     
    374386      ! get variable extra information 
    375387      CALL var_def_extra(TRIM(cn_varcfg)) 
     388 
     389      ! get dummy variable 
     390      CALL var_get_dummy(TRIM(cn_dumcfg)) 
     391      ! get dummy dimension 
     392      CALL dim_get_dummy(TRIM(cn_dumcfg)) 
     393      ! get dummy attribute 
     394      CALL att_get_dummy(TRIM(cn_dumcfg)) 
    376395 
    377396      READ( il_fileid, NML = namcrs ) 
     
    434453   ! check 
    435454   ! check output file do not already exist 
    436    cl_fileout=file_rename(cn_fileout,1) 
     455   IF( in_nproc > 0 )THEN 
     456      cl_fileout=file_rename(cn_fileout,1) 
     457   ELSE 
     458      cl_fileout=file_rename(cn_fileout) 
     459   ENDIF 
    437460   INQUIRE(FILE=TRIM(cl_fileout), EXIST=ll_exist) 
    438461   IF( ll_exist )THEN 
     
    468491   &                            il_rho(:) ) 
    469492 
    470    ! compute level 
    471    ALLOCATE(tl_level(ip_npoint)) 
    472    tl_level(:)=vgrid_get_level(tl_bathy1, cl_namelist ) 
    473  
    474    ! remove ghost cell 
     493   ! fine grid ghost cell 
    475494   il_xghost(:,:)=grid_get_ghost(tl_bathy1) 
    476    DO ji=1,ip_npoint 
    477       CALL grid_del_ghost(tl_level(ji), il_xghost(:,:)) 
    478    ENDDO 
    479  
    480    ! clean 
    481    CALL mpp_clean(tl_bathy1) 
    482495 
    483496   ! work on variables 
     
    507520 
    508521               jvar=jvar+1 
    509                 
     522 
    510523               WRITE(*,'(2x,a,a)') "work on variable "//& 
    511524               &  TRIM(tl_multi%t_mpp(ji)%t_proc(1)%t_var(jj)%c_name) 
     
    514527               tl_var(jvar) = create_restart_matrix( & 
    515528               &  tl_multi%t_mpp(ji)%t_proc(1)%t_var(jj), tl_coord1, & 
    516                &  in_nlevel, tl_level(:) ) 
     529               &  in_nlevel, il_xghost(:,:) ) 
     530 
     531               ! add ghost cell 
     532               CALL grid_add_ghost(tl_var(jvar), il_xghost(:,:)) 
    517533 
    518534            ENDDO 
     
    545561            CALL iom_mpp_close(tl_mpp) 
    546562 
    547             IF( ANY( tl_mpp%t_dim(1:2)%i_len /= & 
    548             &        tl_coord0%t_dim(1:2)%i_len) )THEN 
     563            IF( ANY(tl_mpp%t_dim(1:2)%i_len /= tl_coord0%t_dim(1:2)%i_len) .OR.& 
     564            &   ALL(il_rho(:)==1) )THEN 
    549565            !!! extract value from fine grid  
    550566 
    551                IF( ANY( tl_mpp%t_dim(1:2)%i_len <= & 
     567               IF( ANY( tl_mpp%t_dim(1:2)%i_len < & 
    552568               &        tl_coord1%t_dim(1:2)%i_len) )THEN 
    553                   CALL logger_fatal("CREATE RESTART: dimension in file "//& 
     569                  CALL logger_fatal("CREATE RESTART: dimensions in file "//& 
    554570                  &  TRIM(tl_mpp%c_name)//" smaller than those in fine"//& 
    555571                  &  " grid coordinates.") 
    556572               ENDIF 
    557573 
     574               ! use coord0 instead of mpp for restart file case  
     575               !  (without lon,lat) 
     576               ll_sameGrid=.FALSE. 
     577               IF( ALL(tl_mpp%t_dim(1:2)%i_len /= tl_coord0%t_dim(1:2)%i_len) & 
     578               &   )THEN 
     579                  ll_sameGrid=.TRUE.  
     580               ENDIF 
     581 
    558582               ! compute domain on fine grid 
    559                il_ind(:,:)=grid_get_coarse_index(tl_mpp, tl_coord1 ) 
     583               IF( ll_sameGrid )THEN 
     584                  il_ind(:,:)=grid_get_coarse_index(tl_mpp, tl_coord1 ) 
     585               ELSE 
     586                  il_ind(:,:)=grid_get_coarse_index(tl_coord0, tl_coord1 ) 
     587               ENDIF 
    560588 
    561589               il_imin1=il_ind(1,1) ; il_imax1=il_ind(1,2) 
     
    563591 
    564592               !- check grid coincidence 
    565                CALL grid_check_coincidence( tl_mpp, tl_coord1, & 
    566                &                            il_imin1, il_imax1, & 
    567                &                            il_jmin1, il_jmax1, & 
    568                &                            il_rho(:) ) 
     593               IF( ll_sameGrid )THEN 
     594                  CALL grid_check_coincidence( tl_mpp, tl_coord1, & 
     595                  &                            il_imin1, il_imax1, & 
     596                  &                            il_jmin1, il_jmax1, & 
     597                  &                            il_rho(:) ) 
     598               ELSE 
     599                  CALL grid_check_coincidence( tl_coord0, tl_coord1, & 
     600                  &                            il_imin1, il_imax1, & 
     601                  &                            il_jmin1, il_jmax1, & 
     602                  &                            il_rho(:) ) 
     603               ENDIF 
    569604 
    570605               ! compute domain 
     
    579614               DO jj=1,tl_multi%t_mpp(ji)%t_proc(1)%i_nvar 
    580615 
    581                   WRITE(*,'(2x,a,a)') "work on variable "//& 
     616                  WRITE(*,'(2x,a,a)') "work on (extract) variable "//& 
    582617                  &  TRIM(tl_multi%t_mpp(ji)%t_proc(1)%t_var(jj)%c_name) 
    583618 
     
    600635                  CALL att_clean(tl_att) 
    601636 
    602                   ! use mask 
    603                   CALL create_restart_mask(tl_var(jvar), tl_level(:)) 
    604  
    605637                  ! add ghost cell 
    606                   CALL grid_add_ghost( tl_var(jvar), tl_dom1%i_ghost(:,:) ) 
     638                  CALL grid_add_ghost(tl_var(jvar), tl_dom1%i_ghost(:,:)) 
    607639 
    608640               ENDDO 
     
    631663               DO jj=1,tl_multi%t_mpp(ji)%t_proc(1)%i_nvar 
    632664 
    633                   WRITE(*,'(2x,a,a)') "work on variable "//& 
     665                  WRITE(*,'(2x,a,a)') "work on (interp) variable "//& 
    634666                  &  TRIM(tl_multi%t_mpp(ji)%t_proc(1)%t_var(jj)%c_name) 
    635667 
     
    646678                  &                                   id_rho=il_rho(:), & 
    647679                  &                                   cd_point=TRIM(tl_var(jvar)%c_point)) 
    648                    
    649680 
    650681                  ! interpolate variable 
    651                   CALL create_restart_interp(tl_var(jvar), tl_level(:), & 
     682                  CALL create_restart_interp(tl_var(jvar), &  
    652683                  &                          il_rho(:), & 
    653684                  &                          id_offset=il_offset(:,:)) 
     
    675706                  CALL att_clean(tl_att) 
    676707 
    677                   ! use mask 
    678                   CALL create_restart_mask(tl_var(jvar), tl_level(:)) 
    679  
    680708                  ! add ghost cell 
    681                   CALL grid_add_ghost( tl_var(jvar), il_xghost(:,:) ) 
    682  
    683  
     709                  CALL grid_add_ghost(tl_var(jvar), il_xghost(:,:)) 
    684710               ENDDO 
    685711 
     
    705731   CALL mpp_clean(tl_coord0) 
    706732 
     733   IF( .NOT. ln_extrap )THEN 
     734      ! compute level 
     735      ALLOCATE(tl_level(ip_npoint)) 
     736      tl_level(:)=vgrid_get_level(tl_bathy1, cl_namelist ) 
     737   ENDIF 
     738 
     739   ! clean 
     740   CALL mpp_clean(tl_bathy1) 
     741 
    707742   ! use additional request 
    708743   DO jvar=1,il_nvar 
    709744 
     745      ! change unit and apply factor 
     746      CALL var_chg_unit(tl_var(jvar)) 
     747 
    710748      ! forced min and max value 
    711749      CALL var_limit_value(tl_var(jvar)) 
     
    714752      CALL filter_fill_value(tl_var(jvar)) 
    715753 
    716       ! extrapolate 
    717       CALL extrap_fill_value(tl_var(jvar), id_iext=in_extrap, & 
    718       &                                    id_jext=in_extrap, & 
    719       &                                    id_kext=in_extrap) 
     754      IF( .NOT. ln_extrap )THEN 
     755         ! use mask 
     756         CALL create_restart_mask(tl_var(jvar), tl_level(:)) 
     757      ENDIF 
    720758 
    721759   ENDDO 
     
    724762   IF( in_niproc == 0 .AND. & 
    725763   &   in_njproc == 0 .AND. & 
    726    &   in_nproc  == 0 )THEN 
     764   &   in_nproc == 0 )THEN 
    727765      in_niproc = 1 
    728766      in_njproc = 1 
     
    745783 
    746784   DO ji=1,ip_maxdim 
     785 
    747786      IF( tl_dim(ji)%l_use )THEN 
    748787         CALL mpp_move_dim(tl_mppout, tl_dim(ji)) 
     
    754793         END SELECT  
    755794      ENDIF 
     795 
    756796   ENDDO 
    757797 
     
    782822         CALL mpp_add_var(tl_mppout, tl_depth) 
    783823      ELSE 
    784          CALL logger_error("CREATE RESTART: no value for depth variable.") 
     824         CALL logger_warn("CREATE RESTART: no value for depth variable.") 
    785825      ENDIF 
    786826   ENDIF 
     
    792832         CALL mpp_add_var(tl_mppout, tl_time) 
    793833      ELSE 
    794          CALL logger_error("CREATE RESTART: no value for time variable.") 
     834         CALL logger_warn("CREATE RESTART: no value for time variable.") 
    795835      ENDIF 
    796836   ENDIF 
     
    798838 
    799839   ! add other variable 
    800    DO jvar=1,il_nvar 
     840   DO jvar=il_nvar,1,-1 
    801841      ! check if variable already add 
    802842      il_index=var_get_index(tl_mppout%t_proc(1)%t_var(:), tl_var(jvar)%c_name) 
     
    807847   ENDDO 
    808848 
    809 !   DO ji=1,4 
    810 !      CALL grid_add_ghost( tl_level(ji), il_xghost(:,:) ) 
    811 !      CALL var_clean(tl_level(ji)) 
    812 !   ENDDO 
    813  
    814849   ! add some attribute 
    815850   tl_att=att_init("Created_by","SIREN create_restart") 
     
    839874   ENDIF 
    840875 
     876   ! print 
     877   CALL mpp_print(tl_mppout) 
     878 
    841879   ! create file 
    842880   CALL iom_mpp_create(tl_mppout) 
     
    847885   CALL iom_mpp_close(tl_mppout) 
    848886 
    849    ! print 
    850    CALL mpp_print(tl_mppout) 
    851  
    852887   ! clean 
    853888   CALL att_clean(tl_att) 
    854889   CALL var_clean(tl_var(:)) 
    855890   DEALLOCATE(tl_var) 
    856    CALL var_clean(tl_level(:)) 
    857    DEALLOCATE(tl_level) 
     891   IF( .NOT. ln_extrap )THEN 
     892      CALL var_clean(tl_level(:)) 
     893      DEALLOCATE(tl_level) 
     894   ENDIF 
    858895 
    859896   CALL mpp_clean(tl_mppout) 
     
    873910   !> and with dimension of the coordinate file.<br/>  
    874911   !> Then the variable array of value is split into equal subdomain. 
    875    !> Each subdomain is filled with the corresponding value of the matrix. 
     912   !> Each subdomain is filled with the associated value of the matrix. 
    876913   !> 
    877914   !> @author J.Paul 
    878    !> - November, 2013- Initial Version 
     915   !> @date November, 2013 - Initial Version 
     916   !> @date June, 2015 
     917   !> - do not use level anymore  
    879918   !> 
    880919   !> @param[in] td_var    variable structure  
    881920   !> @param[in] td_coord  coordinate file structure  
    882921   !> @param[in] id_nlevel number of vertical level   
    883    !> @param[in] td_level  array of level on T,U,V,F point (variable structure)  
     922   !> @param[in] id_xghost ghost cell array 
    884923   !> @return variable structure  
    885924   !------------------------------------------------------------------- 
    886    FUNCTION create_restart_matrix(td_var, td_coord, id_nlevel, td_level) 
     925   FUNCTION create_restart_matrix(td_var, td_coord, id_nlevel, id_xghost) 
    887926      IMPLICIT NONE 
    888927      ! Argument 
    889       TYPE(TVAR)              , INTENT(IN) :: td_var 
    890       TYPE(TMPP)              , INTENT(IN) :: td_coord 
    891       INTEGER(i4)             , INTENT(IN) :: id_nlevel 
    892       TYPE(TVAR), DIMENSION(:), INTENT(IN) :: td_level 
     928      TYPE(TVAR)                 , INTENT(IN) :: td_var 
     929      TYPE(TMPP)                 , INTENT(IN) :: td_coord 
     930      INTEGER(i4)                , INTENT(IN) :: id_nlevel 
     931      INTEGER(i4), DIMENSION(:,:), INTENT(IN) :: id_xghost 
    893932 
    894933      ! function 
     
    899938      INTEGER(i4)      , DIMENSION(3)                    :: il_size 
    900939      INTEGER(i4)      , DIMENSION(3)                    :: il_rest 
    901       INTEGER(i4)      , DIMENSION(2,2)                  :: il_xghost 
    902940 
    903941      INTEGER(i4)      , DIMENSION(:)      , ALLOCATABLE :: il_ishape 
     
    915953      !---------------------------------------------------------------- 
    916954 
    917       ! look for ghost cell 
    918       il_xghost(:,:)=grid_get_ghost( td_coord ) 
    919  
    920955      ! write value on grid 
    921956      ! get matrix dimension 
     
    929964 
    930965      ! remove ghost cell 
    931       tl_dim(jp_I)%i_len=tl_dim(jp_I)%i_len - SUM(il_xghost(jp_I,:))*ip_ghost 
    932       tl_dim(jp_J)%i_len=tl_dim(jp_J)%i_len - SUM(il_xghost(jp_J,:))*ip_ghost 
     966      tl_dim(jp_I)%i_len=tl_dim(jp_I)%i_len - SUM(id_xghost(jp_I,:))*ip_ghost 
     967      tl_dim(jp_J)%i_len=tl_dim(jp_J)%i_len - SUM(id_xghost(jp_J,:))*ip_ghost 
    933968 
    934969      ! split output domain in N subdomain depending of matrix dimension  
     
    9921027      DEALLOCATE(dl_value) 
    9931028 
    994       ! use mask 
    995       CALL create_restart_mask(create_restart_matrix, td_level(:)) 
    996  
    997       ! add ghost cell 
    998       CALL grid_add_ghost( create_restart_matrix, il_xghost(:,:) ) 
    999  
    10001029      ! clean  
    10011030      DEALLOCATE(il_ishape) 
     
    10091038   !>  
    10101039   !> @author J.Paul 
    1011    !> - November, 2013- Initial Version 
     1040   !> @date November, 2013 - Initial Version 
    10121041   !> 
    10131042   !> @param[inout] td_var variable structure 
     
    10711100   !>  
    10721101   !> @author J.Paul 
    1073    !> - Nov, 2013- Initial Version 
     1102   !> @date November, 2013 - Initial Version 
     1103   !> @date June, 2015 
     1104   !> - do not use level anymore (for extrapolation) 
    10741105   !> 
    10751106   !> @param[inout] td_var    variable structure  
    1076    !> @param[inout] td_level  fine grid level, array of variable structure 
    10771107   !> @param[in] id_rho       array of refinment factor 
    10781108   !> @param[in] id_offset    array of offset between fine and coarse grid 
     
    10801110   !> @param[in] id_jext      j-direction size of extra bands (default=im_minext) 
    10811111   !------------------------------------------------------------------- 
    1082    SUBROUTINE create_restart_interp( td_var, td_level,& 
     1112   SUBROUTINE create_restart_interp( td_var, &  
    10831113   &                                 id_rho,          & 
    10841114   &                                 id_offset,       & 
     
    10891119      ! Argument 
    10901120      TYPE(TVAR) ,                 INTENT(INOUT) :: td_var 
    1091       TYPE(TVAR) , DIMENSION(:)  , INTENT(INOUT) :: td_level 
    10921121      INTEGER(i4), DIMENSION(:)  , INTENT(IN   ) :: id_rho 
    10931122      INTEGER(i4), DIMENSION(:,:), INTENT(IN   ) :: id_offset 
     
    11191148         il_jext=2 
    11201149      ENDIF 
    1121  
    11221150      ! work on variable 
    11231151      ! add extraband 
     
    11251153 
    11261154      ! extrapolate variable 
    1127       CALL extrap_fill_value( td_var, td_level(:),    & 
    1128       &                               id_offset(:,:), & 
    1129       &                               id_rho(:),      & 
    1130       &                               id_iext=il_iext, id_jext=il_jext ) 
     1155      CALL extrap_fill_value( td_var ) 
    11311156 
    11321157      ! interpolate variable 
     
    11461171   !> 
    11471172   !> @author J.Paul 
    1148    !> - November, 2014- Initial Version 
     1173   !> @date November, 2014 - Initial Version 
    11491174   !> 
    11501175   !> @param[in] td_mpp       mpp structure 
     
    11751200            &        tl_depth%d_value(:,:,:,:) ) )THEN 
    11761201 
    1177                CALL logger_fatal("CREATE BOUNDARY: depth value from "//& 
    1178                &  TRIM(tl_multi%t_mpp(ji)%c_name)//" not conform "//& 
     1202               CALL logger_warn("CREATE BOUNDARY: depth value from "//& 
     1203               &  TRIM(td_mpp%c_name)//" not conform "//& 
    11791204               &  " to those from former file(s).") 
    11801205 
     
    11971222   !> 
    11981223   !> @author J.Paul 
    1199    !> - November, 2014- Initial Version 
     1224   !> @date November, 2014 - Initial Version 
    12001225   !> 
    12011226   !> @param[in] td_mpp      mpp structure 
     
    12201245 
    12211246      ! get or check depth value 
     1247 
    12221248      IF( td_mpp%t_proc(1)%i_timeid /= 0 )THEN 
    12231249 
     
    12311257            IF( tl_date1 - tl_date2 /= 0 )THEN 
    12321258 
    1233                CALL logger_fatal("CREATE BOUNDARY: date from "//& 
    1234                &  TRIM(tl_multi%t_mpp(ji)%c_name)//" not conform "//& 
     1259               CALL logger_warn("CREATE BOUNDARY: date from "//& 
     1260               &  TRIM(td_mpp%c_name)//" not conform "//& 
    12351261               &  " to those from former file(s).") 
    12361262 
  • branches/2015/dev_r5003_MERCATOR6_CRS/NEMOGCM/TOOLS/SIREN/src/dimension.f90

    r5602 r7261  
    7878!> 
    7979!>    This subroutine filled dimension structure with unused dimension,  
    80 !>    then switch from "unordered" dimension to "ordered" dimension.<br/> 
     80!>    then switch from "disordered" dimension to "ordered" dimension.<br/> 
    8181!>    The dimension structure return will be:<br/> 
    8282!>    tl_dim(1) => 'X', i_len=10, l_use=T, l_uld=F<br/> 
     
    9494!>    - cl_neworder : character(len=4) (example: 'yxzt') 
    9595!> 
    96 !>    to switch dimension array from ordered dimension to unordered 
     96!>    to switch dimension array from ordered dimension to disordered 
    9797!> dimension:<br/> 
    9898!> @code 
    99 !>    CALL dim_unorder(tl_dim(:)) 
     99!>    CALL dim_disorder(tl_dim(:)) 
    100100!> @endcode 
    101101!> 
     
    111111!>    CALL dim_reshape_2xyzt(tl_dim(:), value(:,:,:,:)) 
    112112!> @endcode 
    113 !>       - value must be a 4D array of real(8) value "unordered" 
    114 !> 
    115 !>    to reshape array of value in "unordered" dimension:<br/> 
     113!>       - value must be a 4D array of real(8) value "disordered" 
     114!> 
     115!>    to reshape array of value in "disordered" dimension:<br/> 
    116116!> @code 
    117117!>    CALL dim_reshape_xyzt2(tl_dim(:), value(:,:,:,:)) 
     
    123123!>    CALL dim_reorder_2xyzt(tl_dim(:), tab(:)) 
    124124!> @endcode 
    125 !>       - tab must be a 1D array with 4 elements "unordered". 
     125!>       - tab must be a 1D array with 4 elements "disordered". 
    126126!>       It could be composed of character, integer(4), or logical 
    127127!>  
    128 !>    to reorder a 1D array of 4 elements in "unordered" dimension:<br/> 
     128!>    to reorder a 1D array of 4 elements in "disordered" dimension:<br/> 
    129129!> @code 
    130 !>    CALL dim_reorder_2xyzt(tl_dim(:), tab(:)) 
     130!>    CALL dim_reorder_xyzt2(tl_dim(:), tab(:)) 
    131131!> @endcode 
    132132!>       - tab must be a 1D array with 4 elements "ordered". 
     
    154154! REVISION HISTORY: 
    155155!> @date November, 2013 - Initial Version 
     156!> @date Spetember, 2015 
     157!> - manage useless (dummy) dimension 
    156158!> 
    157159!> @note Software governed by the CeCILL licence     (NEMOGCM/NEMO_CeCILL.txt) 
     
    168170   PUBLIC :: TDIM              !< dimension structure 
    169171 
     172   PRIVATE :: cm_dumdim        !< dummy dimension array 
     173 
    170174   ! function and subroutine 
    171175   PUBLIC :: dim_init          !< initialize dimension structure 
     
    173177   PUBLIC :: dim_print         !< print dimension information 
    174178   PUBLIC :: dim_copy          !< copy dimension structure 
    175    PUBLIC :: dim_reorder       !< filled dimension structure to switch from unordered to ordered dimension 
    176    PUBLIC :: dim_unorder       !< switch dimension array from ordered to unordered dimension 
     179   PUBLIC :: dim_reorder       !< filled dimension structure to switch from disordered to ordered dimension 
     180   PUBLIC :: dim_disorder      !< switch dimension array from ordered to disordered dimension 
    177181   PUBLIC :: dim_fill_unused   !< filled dimension structure with unused dimension  
    178182   PUBLIC :: dim_reshape_2xyzt !< reshape array dimension to ('x','y','z','t') 
     
    182186   PUBLIC :: dim_get_index     !< get dimension index in array of dimension structure 
    183187   PUBLIC :: dim_get_id        !< get dimension id in array of dimension structure 
     188   PUBLIC :: dim_get_dummy     !< fill dummy dimension array 
     189   PUBLIC :: dim_is_dummy      !< check if dimension is defined as dummy dimension 
    184190 
    185191   PRIVATE :: dim__reshape_2xyzt_dp ! reshape real(8) 4D array to ('x','y','z','t') 
     
    209215   END TYPE 
    210216 
     217   CHARACTER(LEN=lc), DIMENSION(ip_maxdum), SAVE :: cm_dumdim !< dummy dimension 
     218 
    211219   INTERFACE dim_print 
    212220      MODULE PROCEDURE dim__print_unit ! print information on one dimension 
     
    321329   !> @author J.Paul 
    322330   !> @date November, 2013 - Initial Version 
    323    !> @date September, 2014 - do not check if dimension used 
     331   !> @date September, 2014  
     332   !> - do not check if dimension used 
    324333   !> 
    325334   !> @param[in] td_dim    array of dimension structure 
     
    502511   !> Optionally length could be inform, as well as short name and if dimension 
    503512   !> is unlimited or not.<br/> 
    504    !> define dimension is supposed to be used. 
    505    !> 
    506    !> @author J.Paul 
    507    !> @date November, 2013 - Initial Version 
     513   !> By default, define dimension is supposed to be used. 
     514   !> Optionally you could force a defined dimension to be unused.  
     515   !> 
     516   !> @author J.Paul 
     517   !> @date November, 2013 - Initial Version 
     518   !> @date February, 2015  
     519   !> - add optional argument to define dimension unused 
     520   !> @date July, 2015 
     521   !> - Bug fix: inform order to disorder table instead of disorder to order 
     522   !> table 
    508523   ! 
    509524   !> @param[in] cd_name   dimension name 
     
    511526   !> @param[in] ld_uld    dimension unlimited 
    512527   !> @param[in] cd_sname  dimension short name 
     528   !> @param[in] ld_use    dimension use or not 
    513529   !> @return dimension structure 
    514530   !------------------------------------------------------------------- 
    515    TYPE(TDIM) FUNCTION dim_init( cd_name, id_len, ld_uld, cd_sname) 
     531   TYPE(TDIM) FUNCTION dim_init( cd_name, id_len, ld_uld, cd_sname, ld_use ) 
    516532      IMPLICIT NONE 
    517533 
     
    521537      LOGICAL,          INTENT(IN), OPTIONAL :: ld_uld 
    522538      CHARACTER(LEN=*), INTENT(IN), OPTIONAL :: cd_sname 
     539      LOGICAL,          INTENT(IN), OPTIONAL :: ld_use 
    523540 
    524541      ! local variable 
     
    543560 
    544561      ! define dimension is supposed to be used 
    545       dim_init%l_use=.TRUE. 
     562      IF( PRESENT(ld_use) )THEN 
     563         dim_init%l_use=ld_use 
     564      ELSE 
     565         dim_init%l_use=.TRUE. 
     566      ENDIF 
    546567 
    547568      IF( PRESENT(cd_sname) )THEN 
     
    590611      ENDIF 
    591612       
    592       ! get dimension orderer index 
    593       dim_init%i_2xyzt=SCAN(TRIM(cp_dimorder),TRIM(dim_init%c_sname)) 
     613      ! get dimension order indices 
     614      dim_init%i_xyzt2=SCAN(TRIM(cp_dimorder),TRIM(dim_init%c_sname)) 
    594615 
    595616   END FUNCTION dim_init 
     
    655676   !> @author J.Paul 
    656677   !> @date November, 2013 - Initial Version 
     678   !> @date July, 2015  
     679   !> - Bug fix: use order to disorder table (see dim_init) 
    657680   !> 
    658681   !> @param[in] td_dim array of dimension structure 
     
    686709         ! search missing dimension 
    687710         IF( INDEX(cl_dimin,TRIM(fct_lower(cp_dimorder(ji:ji)))) == 0 )THEN 
    688             ! search first empty dimension 
    689             il_ind(:)=MINLOC( tl_dim(:)%i_2xyzt, tl_dim(:)%i_2xyzt == 0 ) 
     711            ! search first empty dimension (see dim_init) 
     712            il_ind(:)=MINLOC( tl_dim(:)%i_xyzt2, tl_dim(:)%i_xyzt2 == 0 ) 
    690713 
    691714            ! put missing dimension instead of empty one 
     
    693716            ! update output structure 
    694717            tl_dim(il_ind(1))%c_name=fct_lower(cp_dimorder(ji:ji)) 
    695             tl_dim(il_ind(1))%i_2xyzt=ji 
     718            tl_dim(il_ind(1))%i_xyzt2=ji 
    696719            tl_dim(il_ind(1))%i_len=1 
    697720            tl_dim(il_ind(1))%l_use=.FALSE. 
     
    711734   !> This subroutine switch element of an array (4 elts) of dimension  
    712735   !> structure  
    713    !> from unordered dimension to ordered dimension <br/> 
     736   !> from disordered dimension to ordered dimension <br/> 
    714737   !> 
    715738   !> @details 
     
    722745   !> @author J.Paul 
    723746   !> @date November, 2013 - Initial Version 
    724    !> @date September, 2014 - allow to choose ordered dimension to be output 
     747   !> @date September, 2014  
     748   !> - allow to choose ordered dimension to be output 
    725749   !> 
    726750   !> @param[inout] td_dim    array of dimension structure 
     
    811835   !------------------------------------------------------------------- 
    812836   !> @brief This subroutine switch dimension array from ordered dimension ('x','y','z','t') 
    813    !> to unordered dimension. <br/> 
     837   !> to disordered dimension. <br/> 
    814838   !> @details 
    815839   !> Example: (/'x','y','z','t'/) => (/'z','x','t','y'/)<br/> 
     
    822846   !> @param[inout] td_dim array of dimension structure 
    823847   !------------------------------------------------------------------- 
    824    SUBROUTINE dim_unorder(td_dim) 
     848   SUBROUTINE dim_disorder(td_dim) 
    825849      IMPLICIT NONE 
    826850      ! Argument       
     
    835859 
    836860      IF( SIZE(td_dim(:)) /= ip_maxdim )THEN 
    837          CALL logger_error("DIM UNORDER: invalid dimension of array dimension.") 
     861         CALL logger_error("DIM DISORDER: invalid dimension of array dimension.") 
    838862      ELSE       
    839863         ! add dummy xyzt2 id to unused dimension 
     
    868892      ENDIF 
    869893 
    870    END SUBROUTINE dim_unorder 
     894   END SUBROUTINE dim_disorder 
    871895   !------------------------------------------------------------------- 
    872896   !> @brief This function reshape real(8) 4D array    
     
    908932 
    909933      IF( SIZE(td_dim(:)) /= ip_maxdim )THEN 
    910          CALL logger_error("DIM RESHAPE 2 XYZT: invalid dimension of array dimension.") 
     934         CALL logger_error("DIM RESHAPE 2 XYZT: invalid dimension of "//& 
     935            &  "array dimension.") 
    911936      ELSE       
    912937 
     
    914939 
    915940            CALL logger_fatal( & 
    916             &  "  DIM RESHAPE 2 XYZT: you should have run dim_reorder & 
    917             &     before running RESHAPE" ) 
     941            &  "  DIM RESHAPE 2 XYZT: you should have run dim_reorder"// & 
     942            &  "   before running RESHAPE" ) 
    918943 
    919944         ENDIF 
     
    972997   !------------------------------------------------------------------- 
    973998   !> @brief This function reshape ordered real(8) 4D array with dimension  
    974    !> (/'x','y','z','t'/) to an "unordered" array.<br/> 
     999   !> (/'x','y','z','t'/) to an "disordered" array.<br/> 
    9751000   !> @details 
    9761001   !> Example: (/'x','y','z','t'/) => (/'z','x','t','y'/) 
     
    10091034 
    10101035      IF( SIZE(td_dim(:)) /= ip_maxdim )THEN 
    1011          CALL logger_error("DIM RESHAPE XYZT 2: invalid dimension of array dimension.") 
     1036         CALL logger_error("DIM RESHAPE XYZT 2: invalid dimension of "//& 
     1037            &  "array dimension.") 
    10121038      ELSE 
    10131039 
     
    10151041 
    10161042            CALL logger_fatal( & 
    1017             &  "  DIM RESHAPE XYZT 2: you should have run dim_reorder & 
    1018             &     before running RESHAPE" ) 
     1043            &  "  DIM RESHAPE XYZT 2: you should have run dim_reorder"// & 
     1044            &  "   before running RESHAPE" ) 
    10191045 
    10201046         ENDIF         
     
    11041130 
    11051131            CALL logger_error( & 
    1106             &  "  DIM REORDER 2 XYZT: you should have run dim_reorder & 
    1107             &     before running REORDER" ) 
     1132            &  "  DIM REORDER 2 XYZT: you should have run dim_reorder"//& 
     1133            &  "   before running REORDER" ) 
    11081134 
    11091135         ENDIF         
     
    11161142   END FUNCTION dim__reorder_2xyzt_i4 
    11171143   !------------------------------------------------------------------- 
    1118    !> @brief This function unordered integer(4) 1D array to be suitable with 
     1144   !> @brief This function disordered integer(4) 1D array to be suitable with 
    11191145   !> initial dimension order (ex: dimension read in file). 
    11201146   !> @note you must have run dim_reorder before use this subroutine 
     
    11431169      IF( SIZE(td_dim(:)) /= ip_maxdim .OR. & 
    11441170      &   SIZE(id_arr(:)) /= ip_maxdim )THEN 
    1145          CALL logger_error("DIM REORDER XYZT 2: invalid dimension of array dimension"//& 
    1146          &              " or of array of value.") 
     1171         CALL logger_error("DIM REORDER XYZT 2: invalid dimension of "//& 
     1172            &  "array dimension or of array of value.") 
    11471173      ELSE       
    11481174         IF( ANY(td_dim(:)%i_xyzt2==0) )THEN 
    11491175 
    11501176            CALL logger_error( & 
    1151             &  "  DIM REORDER XYZT 2: you should have run dim_reorder & 
    1152             &     before running REORDER" ) 
     1177            &  "  DIM REORDER XYZT 2: you should have run dim_reorder"// & 
     1178            &  "   before running REORDER" ) 
    11531179 
    11541180         ENDIF         
     
    11661192   ! 
    11671193   !> @author J.Paul 
    1168    !> @date Nov, 2013 - Initial Version 
     1194   !> @date November, 2013 - Initial Version 
    11691195   ! 
    11701196   !> @param[in] td_dim array of dimension structure 
     
    11931219 
    11941220            CALL logger_error( & 
    1195             &  "  DIM REORDER 2 XYZT: you should have run dim_reorder & 
    1196             &     before running REORDER" ) 
     1221            &  "  DIM REORDER 2 XYZT: you should have run dim_reorder"// & 
     1222            &  "   before running REORDER" ) 
    11971223 
    11981224         ENDIF         
     
    12051231   END FUNCTION dim__reorder_2xyzt_l 
    12061232   !------------------------------------------------------------------- 
    1207    !> @brief This function unordered logical 1D array to be suitable with 
     1233   !> @brief This function disordered logical 1D array to be suitable with 
    12081234   !> initial dimension order (ex: dimension read in file). 
    12091235   !> @note you must have run dim_reorder before use this subroutine 
     
    12381264 
    12391265            CALL logger_error( & 
    1240             &  "  DIM REORDER XYZT 2: you should have run dim_reorder & 
    1241             &     before running REORDER" ) 
     1266            &  "  DIM REORDER XYZT 2: you should have run dim_reorder"//& 
     1267            &  "  before running REORDER" ) 
    12421268 
    12431269         ENDIF         
     
    12941320   END FUNCTION dim__reorder_2xyzt_c 
    12951321   !------------------------------------------------------------------- 
    1296    !> @brief This function unordered string 1D array to be suitable with 
     1322   !> @brief This function disordered string 1D array to be suitable with 
    12971323   !> initial dimension order (ex: dimension read in file). 
    12981324   !> @note you must have run dim_reorder before use this subroutine 
    12991325   ! 
    13001326   !> @author J.Paul 
    1301    !> @date Nov, 2013 - Initial Version 
     1327   !> @date November, 2013 - Initial Version 
    13021328   ! 
    13031329   !> @param[in] td_dim array of dimension structure 
     
    13261352         IF( ANY(td_dim(:)%i_xyzt2==0) )THEN 
    13271353            CALL logger_error( & 
    1328             &  "  DIM REORDER XYZT 2: you should have run dim_reorder & 
    1329             &     before running REORDER" ) 
     1354            &  "  DIM REORDER XYZT 2: you should have run dim_reorder"// & 
     1355            &  "   before running REORDER" ) 
    13301356 
    13311357         ENDIF         
     
    13831409 
    13841410   END SUBROUTINE dim__clean_arr 
     1411   !------------------------------------------------------------------- 
     1412   !> @brief This subroutine fill dummy dimension array 
     1413   ! 
     1414   !> @author J.Paul 
     1415   !> @date September, 2015 - Initial Version 
     1416   ! 
     1417   !> @param[in] cd_dummy dummy configuration file 
     1418   !------------------------------------------------------------------- 
     1419   SUBROUTINE dim_get_dummy( cd_dummy ) 
     1420      IMPLICIT NONE 
     1421      ! Argument 
     1422      CHARACTER(LEN=*), INTENT(IN) :: cd_dummy 
     1423 
     1424      ! local variable 
     1425      INTEGER(i4)   :: il_fileid 
     1426      INTEGER(i4)   :: il_status 
     1427 
     1428      LOGICAL       :: ll_exist 
     1429 
     1430      ! loop indices 
     1431      ! namelist 
     1432      CHARACTER(LEN=lc), DIMENSION(ip_maxdum) :: cn_dumvar 
     1433      CHARACTER(LEN=lc), DIMENSION(ip_maxdum) :: cn_dumdim 
     1434      CHARACTER(LEN=lc), DIMENSION(ip_maxdum) :: cn_dumatt 
     1435 
     1436      !---------------------------------------------------------------- 
     1437      NAMELIST /namdum/ &   !< dummy namelist 
     1438      &  cn_dumvar, &       !< variable  name 
     1439      &  cn_dumdim, &       !< dimension name 
     1440      &  cn_dumatt          !< attribute name 
     1441      !---------------------------------------------------------------- 
     1442 
     1443      ! init 
     1444      cm_dumdim(:)='' 
     1445 
     1446      ! read namelist 
     1447      INQUIRE(FILE=TRIM(cd_dummy), EXIST=ll_exist) 
     1448      IF( ll_exist )THEN 
     1449 
     1450         il_fileid=fct_getunit() 
     1451 
     1452         OPEN( il_fileid, FILE=TRIM(cd_dummy), & 
     1453         &                FORM='FORMATTED',       & 
     1454         &                ACCESS='SEQUENTIAL',    & 
     1455         &                STATUS='OLD',           & 
     1456         &                ACTION='READ',          & 
     1457         &                IOSTAT=il_status) 
     1458         CALL fct_err(il_status) 
     1459         IF( il_status /= 0 )THEN 
     1460            CALL logger_fatal("DIM GET DUMMY: opening "//TRIM(cd_dummy)) 
     1461         ENDIF 
     1462 
     1463         READ( il_fileid, NML = namdum ) 
     1464         cm_dumdim(:)=cn_dumdim(:) 
     1465 
     1466         CLOSE( il_fileid ) 
     1467 
     1468      ENDIF 
     1469 
     1470   END SUBROUTINE dim_get_dummy 
     1471   !------------------------------------------------------------------- 
     1472   !> @brief This function check if dimension is defined as dummy dimension 
     1473   !> in configuraton file 
     1474   !> 
     1475   !> @author J.Paul 
     1476   !> @date September, 2015 - Initial Version 
     1477   ! 
     1478   !> @param[in] td_dim dimension structure 
     1479   !> @return true if dimension is dummy dimension  
     1480   !------------------------------------------------------------------- 
     1481   FUNCTION dim_is_dummy(td_dim) 
     1482      IMPLICIT NONE 
     1483 
     1484      ! Argument       
     1485      TYPE(TDIM), INTENT(IN) :: td_dim 
     1486       
     1487      ! function 
     1488      LOGICAL :: dim_is_dummy 
     1489       
     1490      ! loop indices 
     1491      INTEGER(i4) :: ji 
     1492      !---------------------------------------------------------------- 
     1493 
     1494      dim_is_dummy=.FALSE. 
     1495      DO ji=1,ip_maxdum 
     1496         IF( fct_lower(td_dim%c_name) == fct_lower(cm_dumdim(ji)) )THEN 
     1497            dim_is_dummy=.TRUE. 
     1498            EXIT 
     1499         ENDIF 
     1500      ENDDO 
     1501 
     1502   END FUNCTION dim_is_dummy 
    13851503END MODULE dim 
    13861504 
  • branches/2015/dev_r5003_MERCATOR6_CRS/NEMOGCM/TOOLS/SIREN/src/docsrc/1_install.md

    r5037 r7261  
    1 # How to Install 
     1# Download 
    22 
    3 # Install NEMO 
    4 to install SIREN, you should first install NEMO. 
    5 see [here](http://www.nemo-ocean.eu/Using-NEMO/User-Guides/Basics/NEMO-Quick-Start-Guide) 
     3# Download NEMO # 
     4to install SIREN, you should first download NEMO. 
     5see [NEMO quick start guide](http://www.nemo-ocean.eu/Using-NEMO/User-Guides/Basics/NEMO-Quick-Start-Guide) 
    66 
    7 # Compile SIREN 
     7# Compile SIREN # 
    88when NEMO is installed, you just have to compile SIREN codes: 
    9 1. go to ./NEMOGCM/TOOLS 
    10 2. use maketools <br/> 
    11    to get help: maketools -h  
     9   1. go to ./NEMOGCM/TOOLS 
     10   2. run maketools (ex: ./maketools -n SIREN -m ifort_mpi_beaufix) 
    1211 
    13 # Fortran Compiler 
    14    SIREN codes were succesfully tested with : 
    15    - ifort (version 12.0.4) 
    16    - gfortran (version 4.7.2 20121109) 
    17 <!--   - pgf95 (version 13.9-0) --> 
     12      @note to get help on maketools: ./maketools -h 
    1813 
    19  <HR> 
    20    <b> 
    21    - @ref index 
    22    - @ref md_docsrc_3_codingRules 
    23    - @ref md_docsrc_4_changeLog 
    24    - @ref todo 
    25    </b> 
     14# Fortran Compiler # 
     15SIREN codes were succesfully tested with : 
     16  - ifort (version 15.0.1) 
     17  - gfortran (version 4.8.2 20140120)  
     18 
     19<HR> 
     20  <b> 
     21  - @ref index 
     22  - @ref md_src_docsrc_2_quickstart 
     23  - @ref md_src_docsrc_3_support_bug 
     24  - @ref md_src_docsrc_4_codingRules 
     25  - @ref md_src_docsrc_5_changeLog 
     26  - @ref todo 
     27  </b> 
  • branches/2015/dev_r5003_MERCATOR6_CRS/NEMOGCM/TOOLS/SIREN/src/docsrc/main.dox

    r5037 r7261  
    11/*! 
    2  @mainpage Main Page 
    3  @section descr Generic Description 
    4  SIREN is a software to create regional configuration with 
    5  [NEMO](http://www.nemo-ocean.eu).<br/>  
    6  Actually SIREN create input files needed for a basic NEMO configuration.<br/> 
     2 @mainpage About  
     3 
     4 SIREN is a software to set up regional configuration with [NEMO](http://www.nemo-ocean.eu).<br/>  
     5 Actually SIREN creates the input files you need to run a NEMO regional configuration.<br/> 
    76  
    8  SIREN is composed of a set of 5 Fortran programs : 
    9    - create_coord.f90 to create fine grid coordinate file from coarse grid coordinate file. 
    10    - create_bathy.f90 to create fine grid bathymetry file over domain. 
    11    - merge_bathy.f90 to merge fine grid bathymetry with coarse grid bathymetry at boundaries. 
    12    - create_restart.f90 to create initial state file from coarse grid restart or standard outputs. 
    13    - create_boundary.f90 to create boundary condition from coarse grid standard outputs. 
     7 SIREN allows you to create your own regional configuration embedded in a wider one.<br/> 
    148 
    15 To install those programs see @ref md_docsrc_1_install. 
     9 To know how to install SIREN see @ref md_src_docsrc_1_install. 
    1610 
    17  @note SIREN can not: 
    18  - create global configuration 
    19  - create configuarion around or close to north pole 
    20  - change number of vertical level 
    21  - change grid (horizontal or vertical) 
    22  
    23  @section howto How to use 
    24    @subsection howto_coord to create fine grid coordinate file 
    25    see create_coord.f90 
    26    @subsection howto_bathy to create fine grid bathymetry 
    27    see create_bathy.f90 
    28    @subsection howto_merge to merge fine grid bathymetry 
    29    see merge_bathy.f90 
    30    @subsection howto_restart to create initial state file 
    31    see create_restart.f90 
    32    @subsection howto_boundary to create boundary condition 
    33    see create_boundary.f90 
     11 You could find a tutorial for a quick start with SIREN in @ref md_src_docsrc_2_quickstart.<br/> 
     12 For more information about how to use each component of SIREN 
     13 - see create_coord.f90 to create fine grid coordinate file 
     14 - see create_bathy.f90 to create fine grid bathymetry 
     15 - see merge_bathy.f90 to merge fine grid bathymetry 
     16 - see create_restart.f90 to create initial state file, or other fields. 
     17 - see create_boundary.F90 to create boundary condition 
    3418 
    3519<HR> 
    3620   <b> 
    37    - @ref md_docsrc_1_install 
    38    - @ref md_docsrc_3_codingRules 
    39    - @ref md_docsrc_4_changeLog 
     21   - @ref md_src_docsrc_1_install 
     22   - @ref md_src_docsrc_2_quickstart 
     23   - @ref md_src_docsrc_3_support_bug 
     24   - @ref md_src_docsrc_4_codingRules 
     25   - @ref md_src_docsrc_5_changeLog 
    4026   - @ref todo 
    4127   </b> 
  • branches/2015/dev_r5003_MERCATOR6_CRS/NEMOGCM/TOOLS/SIREN/src/domain.f90

    r5602 r7261  
    246246   ! 
    247247   !> @author J.Paul 
    248    !> - Nov, 2013- Initial Version 
     248   !> @date November, 2013 - Initial Version 
    249249   ! 
    250250   !> @param[inout] td_dom dom structure 
     
    294294   ! 
    295295   !> @author J.Paul 
    296    !> - June, 2013- Initial Version 
     296   !> @date June, 2013 - Initial Version 
    297297   !> @date September, 2014 
    298298   !> - add boundary index 
     
    362362 
    363363         IF( td_mpp%i_perio < 0 .OR. td_mpp%i_perio > 6 )THEN 
    364             CALL logger_error("DOM INIT: invalid grid periodicity. "//& 
    365             &  "you should use grid_get_perio to compute it") 
     364            CALL logger_error("DOM INIT: invalid grid periodicity ("//& 
     365            &  TRIM(fct_str(td_mpp%i_perio))//& 
     366            &  ") you should use grid_get_perio to compute it") 
    366367         ELSE 
    367368            dom__init_mpp%i_perio0=td_mpp%i_perio 
     
    424425   ! 
    425426   !> @author J.Paul 
    426    !> - June, 2013- Initial Version 
     427   !> @date June, 2013 - Initial Version 
    427428   !> @date September, 2014 
    428429   !> - add boundary index 
     
    489490 
    490491         IF( td_file%i_perio < 0 .OR. td_file%i_perio > 6 )THEN 
    491             CALL logger_error("DOM INIT: invalid grid periodicity. "//& 
    492             &  "you should use grid_get_perio to compute it") 
     492            CALL logger_error("DOM INIT: invalid grid periodicity ("//& 
     493            &  TRIM(fct_str(td_file%i_perio))//& 
     494            &  ") you should use grid_get_perio to compute it") 
    493495         ELSE 
    494496            dom__init_file%i_perio0=td_file%i_perio 
     
    548550   !> 
    549551   !> @author J.Paul 
    550    !> - November, 2013- Subroutine written 
     552   !> @date November, 2013 - Initial version 
    551553   ! 
    552554   !> @param[inout] td_dom domain structure 
     
    653655   !> 
    654656   !> @author J.Paul 
    655    !> - November, 2013- Subroutine written 
     657   !> @date November, 2013 - Initial version 
    656658   !> @date September, 2014 
    657659   !> - use zero indice to defined cyclic or global domain 
     
    721723   !> 
    722724   !> @author J.Paul 
    723    !> - November, 2013- Subroutine written 
     725   !> @date November, 2013 - Initial verison 
    724726   ! 
    725727   !> @param[inout] td_dom domain strcuture 
     
    755757   !> 
    756758   !> @author J.Paul 
    757    !> - November, 2013- Subroutine written 
     759   !> @date November, 2013 - Initial version 
    758760   ! 
    759761   !> @param[inout] td_dom domain strcuture 
     
    774776   !> 
    775777   !> @author J.Paul 
    776    !> - November, 2013- Subroutine written 
     778   !> @date November, 2013 - Initial version 
    777779   ! 
    778780   !> @param[inout] td_dom domain strcuture 
     
    806808   !> 
    807809   !> @author J.Paul 
    808    !> - November, 2013- Subroutine written 
     810   !> @date November, 2013 - Initial version 
    809811   ! 
    810812   !> @param[inout] td_dom domain strcuture 
     
    824826   !> 
    825827   !> @author J.Paul 
    826    !> - November, 2013- Subroutine written 
     828   !> @date November, 2013 - Initial version 
    827829   ! 
    828830   !> @param[inout] td_dom domain strcuture 
     
    862864   !> 
    863865   !> @author J.Paul 
    864    !> - November, 2013- Subroutine written 
     866   !> @date November, 2013 - Initial version 
    865867   ! 
    866868   !> @param[inout] td_dom domain strcuture 
     
    912914   !> 
    913915   !> @author J.Paul 
    914    !> - November, 2013- Subroutine written 
     916   !> @date November, 2013 - Initial version 
    915917   ! 
    916918   !> @param[inout] td_dom domain strcuture 
     
    951953   !> 
    952954   !> @author J.Paul 
    953    !> - April, 2013- Subroutine written 
     955   !> @date April, 2013 - Initial version 
    954956   ! 
    955957   !> @param[inout] td_dom domain strcuture 
     
    979981   !> 
    980982   !> @author J.Paul 
    981    !> - November, 2013- Subroutine written 
     983   !> @date November, 2013 - Initial version 
    982984   ! 
    983985   !> @param[inout] td_dom domain strcuture 
     
    10411043   !> 
    10421044   !> @author J.Paul 
    1043    !> - November, 2013- Subroutine written 
     1045   !> @date November, 2013 - Initial version 
    10441046   ! 
    10451047   !> @param[inout] td_dom domain strcuture 
     
    10821084   !> 
    10831085   !> @author J.Paul 
    1084    !> - November, 2013- Subroutine written 
     1086   !> @date November, 2013 - Initial version 
    10851087   ! 
    10861088   !> @param[inout] td_dom domain strcuture 
     
    11801182   !> 
    11811183   !> @author J.Paul 
    1182    !> - November, 2013- Subroutine written 
     1184   !> @date November, 2013 - Initial version 
    11831185   ! 
    11841186   !> @param[inout] td_dom domain strcuture 
     
    12921294   !> 
    12931295   !> @author J.Paul 
    1294    !> @date November, 2013 
     1296   !> @date November, 2013 - Initial version 
    12951297   !> @date September, 2014 
    12961298   !> - take into account number of ghost cell 
     1299   !> @date February, 2016 
     1300   !> - number of extra point is the MAX (not the MIN) of zero and asess value.  
    12971301   ! 
    12981302   !> @param[inout] td_dom domain strcuture 
     
    13421346                  td_dom%i_imin      = td_dom%i_imin - td_dom%i_iextra(1) 
    13431347               ELSE ! td_dom%i_imin - il_iext <= td_dom%i_ghost0(jp_I,1)*ip_ghost 
    1344                   td_dom%i_iextra(1) = MIN(0, & 
     1348                  td_dom%i_iextra(1) = MAX(0, & 
    13451349                  &                         td_dom%i_imin - & 
    13461350                  &                         td_dom%i_ghost0(jp_I,1)*ip_ghost -1) 
     
    13541358               ELSE ! td_dom%i_imax + il_iext >= & 
    13551359                    !  td_dom%t_dim0(1)%i_len - td_dom%i_ghost0(jp_I,2)*ip_ghost 
    1356                   td_dom%i_iextra(2) = MIN(0, & 
     1360                  td_dom%i_iextra(2) = MAX( 0, & 
    13571361                  &                         td_dom%t_dim0(1)%i_len - & 
    13581362                  &                         td_dom%i_ghost0(jp_I,2)*ip_ghost - & 
     
    13621366 
    13631367            ELSE ! td_dom%i_ew0 >= 0 
     1368 
    13641369               ! EW cyclic 
    13651370               IF( td_dom%i_imin - il_iext > 0 )THEN 
     
    13891394            ! nothing to be done 
    13901395         ELSE 
     1396 
    13911397            IF( td_dom%i_jmin - il_jext > td_dom%i_ghost0(jp_J,1)*ip_ghost )THEN 
    13921398               td_dom%i_jextra(1) = il_jext 
    13931399               td_dom%i_jmin      = td_dom%i_jmin - td_dom%i_jextra(1) 
    13941400            ELSE ! td_dom%i_jmin - il_jext <= td_dom%i_ghost0(jp_J,1)*ip_ghost 
    1395                td_dom%i_jextra(1) = MIN(0, & 
     1401               td_dom%i_jextra(1) = MAX( 0, & 
    13961402               &                         td_dom%i_jmin - & 
    13971403               &                         td_dom%i_ghost0(jp_J,1)*ip_ghost - 1) 
     
    14051411            ELSE ! td_dom%i_jmax + il_jext >= & 
    14061412                 !  td_dom%t_dim0(2)%i_len - td_dom%i_ghost0(jp_J,2)*ip_ghost 
    1407                td_dom%i_jextra(2) = MIN(0, & 
     1413               td_dom%i_jextra(2) = MAX( 0, & 
    14081414               &                         td_dom%t_dim0(2)%i_len - & 
    14091415               &                         td_dom%i_ghost0(jp_J,2)*ip_ghost - & 
     
    14331439   ! 
    14341440   !> @author J.Paul 
    1435    !> @date November, 2013 
     1441   !> @date November, 2013 - Initial version 
    14361442   ! 
    14371443   !> @param[inout] td_dom domain strcuture 
     
    14761482   !>  
    14771483   !> @author J.Paul 
    1478    !> @date November, 2013 
     1484   !> @date November, 2013 - Initial version 
    14791485   !> @date September, 2014 
    14801486   !> - take into account boundary for one point size domain 
     
    17151721   ! 
    17161722   !> @author J.Paul 
    1717    !> @date November, 2013 
     1723   !> @date November, 2013 - Initial version 
    17181724   ! 
    17191725   !> @param[inout] td_dom domain strcuture 
  • branches/2015/dev_r5003_MERCATOR6_CRS/NEMOGCM/TOOLS/SIREN/src/extrap.f90

    r5602 r7261  
    1919!>    defining string character _cn\_varinfo_. By default _dist_weight_.<br/> 
    2020!>    Example: 
    21 !>       - cn_varinfo='varname1:dist_weight', 'varname2:min_error' 
     21!>       - cn_varinfo='varname1:ext=dist_weight', 'varname2:ext=min_error' 
    2222!> 
    2323!>    to detect point to be extrapolated:<br/> 
    2424!> @code 
    25 !>    il_detect(:,:,:)=extrap_detect(td_var, [td_level], [id_offset,] [id_rho,] [id_ext])  
     25!>    il_detect(:,:,:)=extrap_detect(td_var) 
    2626!> @endcode 
    2727!>       - il_detect(:,:,:) is 3D array of point to be extrapolated 
    2828!>       - td_var  is coarse grid variable to be extrapolated 
    29 !>       - td_level is fine grid array of level (see vgrid_get_level) [optional] 
    30 !>       - id_offset is array of offset between fine and coarse grid [optional] 
    31 !>       - id_rho    is array of refinment factor [optional] 
    32 !>       - id_ext    is array of number of points to be extrapolated [optional] 
    3329!> 
    3430!>    to extrapolate variable:<br/> 
    3531!> @code 
    36 !>    CALL extrap_fill_value( td_var, [td_level], [id_offset], [id_rho], [id_iext], [id_jext], [id_kext], [id_radius], [id_maxiter]) 
     32!>    CALL extrap_fill_value( td_var, [id_radius]) 
    3733!> @endcode 
    3834!>       - td_var  is coarse grid variable to be extrapolated 
    39 !>       - td_level is fine grid array of level (see vgrid_get_level) [optional] 
    40 !>       - id_offset is array of offset between fine and coarse grid [optional] 
    41 !>       - id_rho    is array of refinment factor [optional] 
    42 !>       - id_iext   is number of points to be extrapolated in i-direction [optional] 
    43 !>       - id_jext   is number of points to be extrapolated in j-direction [optional] 
    44 !>       - id_kext   is number of points to be extrapolated in k-direction [optional] 
    4535!>       - id_radius is radius of the halo used to compute extrapolation [optional] 
    46 !>       - id_maxiter is maximum number of iteration [optional] 
    4736!> 
    4837!>    to add extraband to the variable (to be extrapolated):<br/> 
     
    6251!>       - id_jsize : j-direction size of extra bands [optional] 
    6352!> 
    64 !>    to compute first derivative of 1D array:<br/> 
    65 !> @code 
    66 !>    dl_value(:)=extrap_deriv_1D( dd_value(:), dd_fill, [ld_discont] ) 
    67 !> @endcode 
    68 !>       - dd_value is 1D array of variable 
    69 !>       - dd_fill is FillValue of variable 
    70 !>       - ld_discont is logical to take into account longitudinal East-West discontinuity [optional] 
    71 !> 
    72 !>    to compute first derivative of 2D array:<br/> 
    73 !> @code 
    74 !>    dl_value(:,:)=extrap_deriv_2D( dd_value(:,:), dd_fill, cd_dim, [ld_discont] ) 
    75 !> @endcode 
    76 !>       - dd_value is 2D array of variable 
    77 !>       - dd_fill is FillValue of variable 
    78 !>       - cd_dim is character to compute derivative on first (I) or second (J) dimension 
    79 !>       - ld_discont is logical to take into account longitudinal East-West discontinuity [optional] 
    80 !> 
    81 !>    to compute first derivative of 3D array:<br/> 
    82 !> @code 
    83 !>    dl_value(:,:,:)=extrap_deriv_3D( dd_value(:,:,:), dd_fill, cd_dim, [ld_discont] ) 
    84 !> @endcode 
    85 !>       - dd_value is 3D array of variable 
    86 !>       - dd_fill is FillValue of variable 
    87 !>       - cd_dim is character to compute derivative on first (I), second (J), or third (K) dimension 
    88 !>       - ld_discont is logical to take into account longitudinal East-West discontinuity [optional] 
    89 !> 
    9053!> @warning _FillValue must not be zero (use var_chg_FillValue()) 
    9154!> 
     
    9356!> J.Paul 
    9457! REVISION HISTORY: 
    95 !> @date Nov, 2013 - Initial Version 
     58!> @date November, 2013 - Initial Version 
    9659!> @date September, 2014 
    9760!> - add header 
     61!> @date June, 2015 
     62!> - extrapolate all land points (_FillValue) 
     63!> - move deriv function to math module 
     64!> @date July, 2015 
     65!> - compute extrapolation from north west to south east,  
     66!> and from south east to north west 
    9867!> 
    9968!> @todo 
    10069!> - create module for each extrapolation method 
     70!> - smooth extrapolated points 
    10171!> 
    10272!> @note Software governed by the CeCILL licence     (NEMOGCM/NEMO_CeCILL.txt) 
     
    11080   USE date                            ! date manager 
    11181   USE logger                          ! log file manager 
     82   USE math                            ! mathematical function 
    11283   USE att                             ! attribute manager 
    11384   USE dim                             ! dimension manager 
     
    11889 
    11990   ! type and variable 
    120    PRIVATE :: im_maxiter   !< default maximum number of iteration  
    12191   PRIVATE :: im_minext    !< default minumum number of point to extrapolate 
    12292   PRIVATE :: im_mincubic  !< default minumum number of point to extrapolate for cubic interpolation 
     
    12797   PUBLIC :: extrap_add_extrabands !< add extraband to the variable (to be extrapolated)  
    12898   PUBLIC :: extrap_del_extrabands !< delete extraband of the variable  
    129    PUBLIC :: extrap_deriv_1D       !< compute first derivative of 1D array  
    130    PUBLIC :: extrap_deriv_2D       !< compute first derivative of 2D array  
    131    PUBLIC :: extrap_deriv_3D       !< compute first derivative of 3D array 
    13299 
    133100   PRIVATE :: extrap__detect_wrapper      ! detected point to be extrapolated wrapper 
     
    141108   PRIVATE :: extrap__3D_dist_weight_fill !  
    142109 
    143    INTEGER(i4), PARAMETER :: im_maxiter = 10 !< default maximum number of iteration 
    144110   INTEGER(i4), PARAMETER :: im_minext  = 2  !< default minumum number of point to extrapolate 
    145111   INTEGER(i4), PARAMETER :: im_mincubic= 4  !< default minumum number of point to extrapolate for cubic interpolation 
     
    171137   !>  
    172138   !> @author J.Paul 
    173    !> - November, 2013- Initial Version 
     139   !> @date November, 2013 - Initial Version 
     140   !> @date June, 2015 
     141   !> - do not use level to select points to be extrapolated 
    174142   ! 
    175143   !> @param[in] td_var0   coarse grid variable to extrapolate 
    176    !> @param[in] td_level1 fine grid array of level 
    177    !> @param[in] id_offset array of offset between fine and coarse grid  
    178    !> @param[in] id_rho    array of refinment factor  
    179    !> @param[in] id_ext    array of number of points to be extrapolated 
    180144   !> @return array of point to be extrapolated 
    181145   !------------------------------------------------------------------- 
    182    FUNCTION extrap__detect( td_var0, td_level1, & 
    183    &                        id_offset, id_rho, id_ext ) 
     146   FUNCTION extrap__detect( td_var0 )  
    184147      IMPLICIT NONE 
    185148      ! Argument 
    186149      TYPE(TVAR) ,                 INTENT(IN   ) :: td_var0 
    187       TYPE(TVAR) , DIMENSION(:)  , INTENT(IN   ), OPTIONAL :: td_level1 
    188       INTEGER(i4), DIMENSION(:,:), INTENT(IN   ), OPTIONAL :: id_offset 
    189       INTEGER(i4), DIMENSION(:)  , INTENT(IN   ), OPTIONAL :: id_rho 
    190       INTEGER(i4), DIMENSION(:)  , INTENT(IN   ), OPTIONAL :: id_ext 
    191150 
    192151      ! function 
     
    196155 
    197156      ! local variable 
    198       CHARACTER(LEN=lc)                                :: cl_level 
    199  
    200       INTEGER(i4)                                      :: il_ind 
    201       INTEGER(i4)      , DIMENSION(:,:,:), ALLOCATABLE :: il_detect 
    202       INTEGER(i4)      , DIMENSION(:,:,:), ALLOCATABLE :: il_tmp 
    203       INTEGER(i4)      , DIMENSION(:,:)  , ALLOCATABLE :: il_offset 
    204       INTEGER(i4)      , DIMENSION(:,:)  , ALLOCATABLE :: il_level1 
    205       INTEGER(i4)      , DIMENSION(:,:)  , ALLOCATABLE :: il_level1_G0 
    206       INTEGER(i4)      , DIMENSION(:,:)  , ALLOCATABLE :: il_extra 
    207       INTEGER(i4)      , DIMENSION(:)    , ALLOCATABLE :: il_ext 
    208       INTEGER(i4)      , DIMENSION(:)    , ALLOCATABLE :: il_rho 
    209       INTEGER(i4)      , DIMENSION(:)    , ALLOCATABLE :: il_dim0 
    210  
    211       TYPE(TVAR)                                       :: tl_var1 
    212  
    213157      ! loop indices 
    214158      INTEGER(i4) :: ji0 
    215159      INTEGER(i4) :: jj0 
    216160      INTEGER(i4) :: jk0 
    217       INTEGER(i4) :: ji1 
    218       INTEGER(i4) :: jj1 
    219       INTEGER(i4) :: ji1m 
    220       INTEGER(i4) :: jj1m 
    221       INTEGER(i4) :: ji1p 
    222       INTEGER(i4) :: jj1p 
    223161      !---------------------------------------------------------------- 
    224162 
    225       ! init 
    226       extrap__detect(:,:,:)=0 
    227  
    228       ALLOCATE( il_dim0(3) ) 
    229       il_dim0(:)=td_var0%t_dim(1:3)%i_len 
    230  
    231       ! optional argument 
    232       ALLOCATE( il_rho(ip_maxdim) ) 
    233       il_rho(:)=1 
    234       IF( PRESENT(id_rho) ) il_rho(1:SIZE(id_rho(:)))=id_rho(:) 
    235  
    236       ALLOCATE( il_offset(ip_maxdim,2) ) 
    237       il_offset(:,:)=0 
    238       IF( PRESENT(id_offset) )THEN 
    239          il_offset(1:SIZE(id_offset(:,:),DIM=1),& 
    240          &         1:SIZE(id_offset(:,:),DIM=2) )= id_offset(:,:) 
    241       ELSE 
    242          il_offset(jp_I,:)=FLOOR(REAL(il_rho(jp_I)-1,dp)*0.5) 
    243          il_offset(jp_J,:)=FLOOR(REAL(il_rho(jp_J)-1,dp)*0.5) 
    244       ENDIF 
    245  
    246       ALLOCATE( il_ext(ip_maxdim) ) 
    247       il_ext(:)=im_minext 
    248       IF( PRESENT(id_ext) ) il_ext(1:SIZE(id_ext(:)))=id_ext(:) 
    249  
    250       ALLOCATE( il_detect(il_dim0(1),& 
    251       &                   il_dim0(2),& 
    252       &                   il_dim0(3)) ) 
    253       il_detect(:,:,:)=0 
    254  
    255       ! select point already inform 
    256       DO jk0=1,td_var0%t_dim(3)%i_len 
    257          DO jj0=1,td_var0%t_dim(2)%i_len 
    258             DO ji0=1,td_var0%t_dim(1)%i_len 
    259                IF( td_var0%d_value(ji0,jj0,jk0,1) /= td_var0%d_fill ) il_detect(ji0,jj0,jk0)=1 
    260             ENDDO 
    261          ENDDO 
    262       ENDDO 
    263   
    264       IF( PRESENT(td_level1) )THEN 
    265          SELECT CASE(TRIM(td_var0%c_point)) 
    266             CASE DEFAULT !'T' 
    267                cl_level='tlevel' 
    268             CASE('U') 
    269                cl_level='ulevel' 
    270             CASE('V') 
    271                cl_level='vlevel' 
    272             CASE('F') 
    273                cl_level='flevel' 
    274          END SELECT 
    275  
    276          il_ind=var_get_index(td_level1(:),TRIM(cl_level)) 
    277          IF( il_ind == 0 )THEN 
    278             CALL logger_error("EXTRAP DETECT: can not compute point to be "//& 
    279             &     "extrapolated for variable "//TRIM(td_var0%c_name)//& 
    280             &      ". can not find "//& 
    281             &     "level for variable point "//TRIM(TRIM(td_var0%c_point))) 
    282          ELSE 
    283             tl_var1=var_copy(td_level1(il_ind)) 
    284  
    285             ALLOCATE( il_level1_G0( il_dim0(1), il_dim0(2)) ) 
    286             IF( ALL(tl_var1%t_dim(1:2)%i_len == il_dim0(1:2)) )THEN 
    287  
    288                ! variable to be extrapolated use same resolution than level 
    289                il_level1_G0(:,:)=INT(tl_var1%d_value(:,:,1,1),i4) 
    290                 
    291             ELSE 
    292                ! variable to be extrapolated do not use same resolution than level 
    293                ALLOCATE( il_level1(tl_var1%t_dim(1)%i_len, & 
    294                &                   tl_var1%t_dim(2)%i_len) ) 
    295                ! match fine grid vertical level with coarse grid 
    296                il_level1(:,:)=INT(tl_var1%d_value(:,:,1,1),i4)/il_rho(jp_K) 
    297  
    298                ALLOCATE( il_extra(ip_maxdim,2) ) 
    299                ! coarsening fine grid level 
    300                il_extra(jp_I,1)=CEILING(REAL(il_rho(jp_I)-1,dp)*0.5_dp) 
    301                il_extra(jp_I,2)=FLOOR(REAL(il_rho(jp_I)-1,dp)*0.5_dp) 
    302  
    303                il_extra(jp_J,1)=CEILING(REAL(il_rho(jp_J)-1,dp)*0.5_dp) 
    304