New URL for NEMO forge!   http://forge.nemo-ocean.eu

Since March 2022 along with NEMO 4.2 release, the code development moved to a self-hosted GitLab.
This present forge is now archived and remained online for history.
Changeset 10251 for branches/UKMO/dev_r5518_AMM15_package/NEMOGCM/TOOLS/SIREN/src/create_boundary.f90 – NEMO

Ignore:
Timestamp:
2018-10-29T15:20:26+01:00 (6 years ago)
Author:
kingr
Message:

Rolled back to r10247 - i.e., undid merge of pkg br and 3.6_stable br

File:
1 edited

Legend:

Unmodified
Added
Removed
  • branches/UKMO/dev_r5518_AMM15_package/NEMOGCM/TOOLS/SIREN/src/create_boundary.f90

    r10248 r10251  
    2323!>    ./SIREN/bin/create_boundary create_boundary.nam 
    2424!> @endcode 
    25 !>  <br/>  
    26 !> \image html  boundary_NEATL36_70.png  
    27 !> \image latex boundary_NEATL36_70.png 
    28 !> 
    29 !> @note  
    30 !>    you could find a template of the namelist in templates directory. 
    31 !> 
     25!>     
    3226!>    create_boundary.nam comprise 9 namelists:<br/> 
    3327!>       - logger namelist (namlog) 
     
    4842!>       - cn_logfile   : log filename 
    4943!>       - cn_verbosity : verbosity ('trace','debug','info', 
    50 !> 'warning','error','fatal','none') 
     44!> 'warning','error','fatal') 
    5145!>       - in_maxerror  : maximum number of error allowed 
    5246!> 
     
    8579!>    * _variable namelist (namvar)_:<br/> 
    8680!>       - cn_varinfo : list of variable and extra information about request(s) 
    87 !>          to be used (separated by ',').<br/> 
     81!> to be used.<br/> 
    8882!>          each elements of *cn_varinfo* is a string character.<br/> 
    8983!>          it is composed of the variable name follow by ':',  
    9084!>          then request(s) to be used on this variable.<br/>  
    9185!>          request could be: 
    92 !>             - int = interpolation method 
    93 !>             - ext = extrapolation method 
    94 !>             - flt = filter method 
    95 !>             - unt = new units 
    96 !>             - unf = unit scale factor (linked to new units) 
     86!>             - interpolation method 
     87!>             - extrapolation method 
     88!>             - filter method 
    9789!> 
    9890!>                requests must be separated by ';'.<br/> 
     
    10294!>          @ref extrap and @ref filter.<br/> 
    10395!> 
    104 !>          Example: 'votemper:int=linear;flt=hann;ext=dist_weight', 'vosaline:int=cubic' 
     96!>          Example: 'votemper:linear;hann;dist_weight', 'vosaline:cubic' 
    10597!>          @note  
    10698!>             If you do not specify a method which is required,  
     
    144136!>          segments are separated by '|'.<br/> 
    145137!>          each segments of the boundary is composed of: 
    146 !>             - indice of velocity (orthogonal to boundary .ie.  
    147 !>                for north boundary, J-indice).  
    148 !>             - indice of segemnt start (I-indice for north boundary)  
    149 !>             - indice of segment end  (I-indice for north boundary)<br/> 
    150 !>                indices must be separated by ':' .<br/> 
     138!>             - orthogonal indice (.ie. for north boundary, 
     139!>             J-indice where boundary are).  
     140!>             - first indice of boundary (I-indice for north boundary)  
     141!>             - last  indice of boundary (I-indice for north boundary)<br/> 
     142!>                indices must be separated by ',' .<br/> 
    151143!>             - optionally, boundary size could be added between '(' and ')'  
    152144!>             in the first segment defined. 
     
    155147!> 
    156148!>          Examples: 
    157 !>             - cn_north='index1,first1:last1(width)' 
    158 !>             - cn_north='index1(width),first1:last1|index2,first2:last2' 
    159 !>             \image html  boundary_50.png  
    160 !>             \image latex boundary_50.png 
     149!>             - cn_north='index1,first1,last1(width)' 
     150!>             - cn_north='index1(width),first1,last1|index2,first2,last2' 
     151!> 
     152!>          \image html  boundary_50.png  
     153!>          \image latex boundary_50.png 
     154!> 
    161155!>       - cn_south  : south boundary indices on fine grid 
    162156!>       - cn_east   : east  boundary indices on fine grid 
    163157!>       - cn_west   : west  boundary indices on fine grid 
    164158!>       - ln_oneseg : use only one segment for each boundary or not 
    165 !> 
    166 !>    * _output namelist (namout)_:<br/> 
     159!>       - in_extrap : number of mask point to be extrapolated 
     160!> 
     161!>   * _output namelist (namout)_:<br/> 
    167162!>       - cn_fileout : fine grid boundary basename 
    168163!>         (cardinal and segment number will be automatically added) 
    169 !>       - dn_dayofs  : date offset in day (change only ouput file name) 
    170 !>       - ln_extrap  : extrapolate land point or not 
    171 !> 
    172 !>          Examples:  
    173 !>             - cn_fileout=boundary.nc<br/> 
    174 !>                if time_counter (16/07/2015 00h) is read on input file (see varfile),  
    175 !>                west boundary will be named boundary_west_y2015m07d16 
    176 !>             - dn_dayofs=-2.<br/> 
    177 !>                if you use day offset you get boundary_west_y2015m07d14 
    178 !>        
    179164!> 
    180165!> @author J.Paul 
     
    184169!> - add header for user 
    185170!> - take into account grid point to compue boundaries 
    186 !> - reorder output dimension for north and south boundaries 
    187 !> @date June, 2015 
    188 !> - extrapolate all land points, and add ln_extrap in namelist. 
    189 !> - allow to change unit. 
    190 !> @date July, 2015 
    191 !> - add namelist parameter to shift date of output file name.   
     171!> - reorder output dimension for north and south boundaries  
    192172!> 
    193173!> @note Software governed by the CeCILL licence     (NEMOGCM/NEMO_CeCILL.txt) 
     
    211191   USE dom                             ! domain manager 
    212192   USE grid                            ! grid manager 
    213    USE vgrid                           ! vertical grid manager 
     193   USE vgrid                           ! vartical grid manager 
    214194   USE extrap                          ! extrapolation manager 
    215195   USE interp                          ! interpolation manager 
     
    233213   INTEGER(i4)                                        :: il_status 
    234214   INTEGER(i4)                                        :: il_fileid 
     215   INTEGER(i4)                                        :: il_dim 
    235216   INTEGER(i4)                                        :: il_imin0 
    236217   INTEGER(i4)                                        :: il_imax0 
     
    258239 
    259240   TYPE(TDIM)       , DIMENSION(ip_maxdim)            :: tl_dim 
    260  
    261    TYPE(TDATE)                                        :: tl_date 
    262241    
    263242   TYPE(TBDY)       , DIMENSION(ip_ncard)             :: tl_bdy 
     
    286265   ! namelist variable 
    287266   ! namlog 
    288    CHARACTER(LEN=lc)  :: cn_logfile = 'create_boundary.log'  
    289    CHARACTER(LEN=lc)  :: cn_verbosity = 'warning'  
    290    INTEGER(i4)        :: in_maxerror = 5 
     267   CHARACTER(LEN=lc)                       :: cn_logfile = 'create_boundary.log'  
     268   CHARACTER(LEN=lc)                       :: cn_verbosity = 'warning'  
     269   INTEGER(i4)                             :: in_maxerror = 5 
    291270 
    292271   ! namcfg 
    293    CHARACTER(LEN=lc)  :: cn_varcfg = 'variable.cfg'  
     272   CHARACTER(LEN=lc)                       :: cn_varcfg = 'variable.cfg'  
    294273 
    295274   ! namcrs 
    296    CHARACTER(LEN=lc)  :: cn_coord0 = ''  
    297    INTEGER(i4)        :: in_perio0 = -1 
     275   CHARACTER(LEN=lc)                       :: cn_coord0 = ''  
     276   INTEGER(i4)                             :: in_perio0 = -1 
    298277 
    299278   ! namfin 
    300    CHARACTER(LEN=lc)  :: cn_coord1 = ''  
    301    CHARACTER(LEN=lc)  :: cn_bathy1 = ''  
    302    INTEGER(i4)        :: in_perio1 = -1 
     279   CHARACTER(LEN=lc)                       :: cn_coord1 = ''  
     280   CHARACTER(LEN=lc)                       :: cn_bathy1 = ''  
     281   INTEGER(i4)                             :: in_perio1 = -1 
    303282 
    304283   !namzgr 
    305    REAL(dp)          :: dn_pp_to_be_computed = 0._dp 
    306    REAL(dp)          :: dn_ppsur     = -3958.951371276829_dp 
    307    REAL(dp)          :: dn_ppa0      =   103.9530096000000_dp 
    308    REAL(dp)          :: dn_ppa1      =     2.4159512690000_dp 
    309    REAL(dp)          :: dn_ppa2      =   100.7609285000000_dp 
    310    REAL(dp)          :: dn_ppkth     =    15.3510137000000_dp 
    311    REAL(dp)          :: dn_ppkth2    =    48.0298937200000_dp 
    312    REAL(dp)          :: dn_ppacr     =     7.0000000000000_dp 
    313    REAL(dp)          :: dn_ppacr2    =    13.000000000000_dp 
    314    REAL(dp)          :: dn_ppdzmin   = 6._dp 
    315    REAL(dp)          :: dn_pphmax    = 5750._dp 
    316    INTEGER(i4)       :: in_nlevel    = 75 
    317  
    318    !namzps 
    319    REAL(dp)          :: dn_e3zps_min = 25._dp 
    320    REAL(dp)          :: dn_e3zps_rat = 0.2_dp 
     284   INTEGER(i4)                             :: in_nlevel = 75 
    321285 
    322286   ! namvar 
     
    325289 
    326290   ! namnst 
    327    INTEGER(i4)       :: in_rhoi  = 0 
    328    INTEGER(i4)       :: in_rhoj  = 0 
     291   INTEGER(i4)                             :: in_rhoi  = 0 
     292   INTEGER(i4)                             :: in_rhoj  = 0 
    329293 
    330294   ! nambdy 
    331    LOGICAL           :: ln_north   = .TRUE. 
    332    LOGICAL           :: ln_south   = .TRUE. 
    333    LOGICAL           :: ln_east    = .TRUE. 
    334    LOGICAL           :: ln_west    = .TRUE. 
    335    CHARACTER(LEN=lc) :: cn_north   = '' 
    336    CHARACTER(LEN=lc) :: cn_south   = '' 
    337    CHARACTER(LEN=lc) :: cn_east    = '' 
    338    CHARACTER(LEN=lc) :: cn_west    = '' 
    339    LOGICAL           :: ln_oneseg  = .TRUE. 
     295   LOGICAL                                 :: ln_north   = .TRUE. 
     296   LOGICAL                                 :: ln_south   = .TRUE. 
     297   LOGICAL                                 :: ln_east    = .TRUE. 
     298   LOGICAL                                 :: ln_west    = .TRUE. 
     299   CHARACTER(LEN=lc)                       :: cn_north   = '' 
     300   CHARACTER(LEN=lc)                       :: cn_south   = '' 
     301   CHARACTER(LEN=lc)                       :: cn_east    = '' 
     302   CHARACTER(LEN=lc)                       :: cn_west    = '' 
     303   LOGICAL                                 :: ln_oneseg  = .TRUE. 
     304   INTEGER(i4)                             :: in_extrap  = 0 
    340305 
    341306   ! namout 
    342    CHARACTER(LEN=lc) :: cn_fileout = 'boundary.nc'  
    343    REAL(dp)          :: dn_dayofs  = 0._dp 
    344    LOGICAL           :: ln_extrap  = .FALSE. 
     307   CHARACTER(LEN=lc)                       :: cn_fileout = 'boundary.nc'  
    345308   !------------------------------------------------------------------- 
    346309 
     
    356319   &  cn_coord0,     &  !< coordinate file 
    357320   &  in_perio0         !< periodicity index 
    358   
     321    
    359322   NAMELIST /namfin/ &  !< fine grid namelist 
    360323   &  cn_coord1,     &  !< coordinate file 
     
    363326  
    364327   NAMELIST /namzgr/ & 
    365    &  dn_pp_to_be_computed, & 
    366    &  dn_ppsur,     & 
    367    &  dn_ppa0,      & 
    368    &  dn_ppa1,      & 
    369    &  dn_ppa2,      & 
    370    &  dn_ppkth,     & 
    371    &  dn_ppkth2,    & 
    372    &  dn_ppacr,     & 
    373    &  dn_ppacr2,    & 
    374    &  dn_ppdzmin,   & 
    375    &  dn_pphmax,    & 
    376    &  in_nlevel         !< number of vertical level 
    377  
    378    NAMELIST /namzps/ & 
    379    &  dn_e3zps_min, & 
    380    &  dn_e3zps_rat 
     328   &  in_nlevel 
    381329 
    382330   NAMELIST /namvar/ &  !< variable namelist 
    383331   &  cn_varinfo,    &  !< list of variable and method to apply on. (ex: 'votemper:linear','vosaline:cubic' ) 
    384332   &  cn_varfile        !< list of variable and file where find it. (ex: 'votemper:GLORYS_gridT.nc' )  
    385   
     333    
    386334   NAMELIST /namnst/ &  !< nesting namelist 
    387335   &  in_rhoi,       &  !< refinement factor in i-direction 
     
    397345   &  cn_east ,      &  !< east  boundary indices on fine grid 
    398346   &  cn_west ,      &  !< west  boundary indices on fine grid 
    399    &  ln_oneseg         !< use only one segment for each boundary or not 
     347   &  ln_oneseg,     &  !< use only one segment for each boundary or not 
     348   &  in_extrap         !< number of mask point to be extrapolated 
    400349 
    401350   NAMELIST /namout/ &  !< output namelist 
    402    &  cn_fileout,    &  !< fine grid boundary file basename    
    403    &  dn_dayofs,     &  !< date offset in day (change only ouput file name) 
    404    &  ln_extrap         !< extrapolate or not 
     351   &  cn_fileout    !< fine grid boundary file basename    
    405352   !------------------------------------------------------------------- 
    406353 
     
    501448   ! check 
    502449   ! check output file do not already exist 
    503    ! WARNING: do not work when use time to create output file name 
    504450   DO jk=1,ip_ncard 
    505451      cl_bdyout=boundary_set_filename( TRIM(cn_fileout), & 
    506452      &                                TRIM(cp_card(jk)), 1 ) 
    507       INQUIRE(FILE=TRIM(cl_bdyout), EXIST=ll_exist) 
    508       IF( ll_exist )THEN 
    509          CALL logger_fatal("CREATE BOUNDARY: output file "//TRIM(cl_bdyout)//& 
    510          &  " already exist.") 
    511       ENDIF 
    512  
    513       cl_bdyout=boundary_set_filename( TRIM(cn_fileout), & 
    514       &                                TRIM(cp_card(jk)) ) 
    515453      INQUIRE(FILE=TRIM(cl_bdyout), EXIST=ll_exist) 
    516454      IF( ll_exist )THEN 
     
    552490 
    553491   CALL iom_mpp_open(tl_bathy1) 
    554   
     492    
    555493   tl_var1=iom_mpp_read_var(tl_bathy1,'Bathymetry') 
    556   
     494    
    557495   CALL iom_mpp_close(tl_bathy1) 
    558496 
    559    ! get boundaries indices 
    560497   tl_bdy(:)=boundary_init(tl_var1, ln_north, ln_south, ln_east, ln_west, & 
    561498   &                                cn_north, cn_south, cn_east, cn_west, & 
     
    568505   tl_level(:)=vgrid_get_level(tl_bathy1, cl_namelist ) 
    569506 
    570    ! get coordinate for each segment of each boundary 
     507   ! get coordinate on each segment of each boundary 
    571508   ALLOCATE( tl_segdom1(ip_npoint,ip_maxseg,ip_ncard) ) 
    572509   ALLOCATE( tl_seglvl1(ip_npoint,ip_maxseg,ip_ncard) ) 
    573   
     510    
    574511   DO jl=1,ip_ncard 
    575512      IF( tl_bdy(jl)%l_use )THEN 
     
    579516            tl_segdom1(:,jk,jl)=create_boundary_get_dom( tl_bathy1, & 
    580517            &                                            tl_bdy(jl), jk ) 
    581  
    582             IF( .NOT. ln_extrap )THEN 
    583                ! get fine grid level 
    584                tl_seglvl1(:,jk,jl)= & 
    585                   & create_boundary_get_level( tl_level(:), & 
    586                   &                            tl_segdom1(:,jk,jl)) 
    587             ENDIF 
    588518 
    589519            ! add extra band to fine grid domain (if possible) 
     
    593523               &                  il_rho(jp_I), il_rho(jp_J)) 
    594524            ENDDO 
     525 
     526            ! get fine grid level 
     527            tl_seglvl1(:,jk,jl)=create_boundary_get_level( tl_level(:), & 
     528                                                           tl_segdom1(:,jk,jl)) 
    595529 
    596530         ENDDO 
     
    660594                        &                          in_nlevel ) 
    661595 
     596                        ! use mask 
     597                        CALL create_boundary_use_mask( tl_segvar1(jvar,jk,jl), & 
     598                        &                         tl_seglvl1(jpoint,jk,jl)) 
     599 
    662600                        !del extra 
    663601                        CALL dom_del_extra( tl_segvar1(jvar,jk,jl), & 
     
    716654                  IF( tl_bdy(jl)%l_use )THEN 
    717655                      
    718                      WRITE(*,'(2x,a,a)') 'work on '//TRIM(tl_bdy(jl)%c_card)//& 
    719                         &  ' boundary' 
     656                     WRITE(*,'(2x,a,a)') 'work on '//TRIM(tl_bdy(jl)%c_card)//' boundary' 
    720657                     DO jk=1,tl_bdy(jl)%i_nseg 
    721658                        ! compute domain on fine grid 
     
    725662                            
    726663                           cl_name=tl_multi%t_mpp(ji)%t_proc(1)%t_var(jj)%c_name 
    727                            WRITE(*,'(4x,a,a)') "work on (extract) variable "//& 
    728                               &  TRIM(cl_name) 
     664                           WRITE(*,'(4x,a,a)') "work on variable "//TRIM(cl_name) 
    729665 
    730666                           cl_point=tl_multi%t_mpp(ji)%t_proc(1)%t_var(jj)%c_point 
     
    742678 
    743679                           tl_dom1=dom_copy(tl_segdom1(jpoint,jk,jl)) 
     680                           tl_lvl1=var_copy(tl_seglvl1(jpoint,jk,jl)) 
    744681 
    745682                           ! open mpp files 
     
    750687                           &                     tl_mpp, TRIM(cl_name), tl_dom1) 
    751688 
     689                           ! use mask 
     690                           CALL create_boundary_use_mask( & 
     691                           &                 tl_segvar1(jvar+jj,jk,jl), tl_lvl1) 
     692 
    752693                           ! del extra point 
    753694                           CALL dom_del_extra( tl_segvar1(jvar+jj,jk,jl), & 
     
    758699 
    759700                           ! add attribute to variable 
    760                            tl_att=att_init('src_file', & 
    761                               &  TRIM(fct_basename(tl_mpp%c_name))) 
     701                           tl_att=att_init('src_file',TRIM(fct_basename(tl_mpp%c_name))) 
    762702                           CALL var_move_att(tl_segvar1(jvar+jj,jk,jl), tl_att) 
    763703 
    764                            tl_att=att_init('src_i_indices', & 
    765                               &  (/tl_dom1%i_imin, tl_dom1%i_imax/)) 
     704                           tl_att=att_init('src_i_indices',(/tl_dom1%i_imin, tl_dom1%i_imax/)) 
    766705                           CALL var_move_att(tl_segvar1(jvar+jj,jk,jl), tl_att) 
    767706 
    768                            tl_att=att_init('src_j_indices', & 
    769                               &  (/tl_dom1%i_jmin, tl_dom1%i_jmax/)) 
     707                           tl_att=att_init('src_j_indices',(/tl_dom1%i_jmin, tl_dom1%i_jmax/)) 
    770708                           CALL var_move_att(tl_segvar1(jvar+jj,jk,jl), tl_att) 
    771709 
     
    798736                  IF( tl_bdy(jl)%l_use )THEN 
    799737 
    800                      WRITE(*,'(2x,a,a)') 'work on '//TRIM(tl_bdy(jl)%c_card)//& 
    801                         &  ' boundary' 
     738                     WRITE(*,'(2x,a,a)') 'work on '//TRIM(tl_bdy(jl)%c_card)//' boundary' 
    802739                     DO jk=1,tl_bdy(jl)%i_nseg 
    803740                         
    804741                        ! for each variable of this file 
    805742                        DO jj=1,tl_multi%t_mpp(ji)%t_proc(1)%i_nvar 
    806   
    807                            WRITE(*,'(4x,a,a)') "work on (interp) variable "//& 
     743                            
     744                           WRITE(*,'(4x,a,a)') "work on variable "//& 
    808745                           &  TRIM(tl_multi%t_mpp(ji)%t_proc(1)%t_var(jj)%c_name) 
    809746 
     
    822759 
    823760                           tl_dom1=dom_copy(tl_segdom1(jpoint,jk,jl)) 
     761                           tl_lvl1=var_copy(tl_seglvl1(jpoint,jk,jl)) 
    824762 
    825763                           CALL create_boundary_get_coord( tl_coord1, tl_dom1, & 
     
    857795                           &                 il_jmin0, il_jmax0 ) 
    858796 
    859                            ! add extra band (if possible) to compute  
    860                            ! interpolation 
     797                           ! add extra band (if possible) to compute interpolation 
    861798                           CALL dom_add_extra(tl_dom0) 
    862799 
     
    878815                           CALL dom_del_extra( tl_segvar1(jvar+jj,jk,jl), & 
    879816                           &                   tl_dom0, il_rho(:) ) 
     817 
     818                           ! use mask 
     819                           CALL create_boundary_use_mask( & 
     820                           &     tl_segvar1(jvar+jj,jk,jl), tl_lvl1) 
    880821 
    881822                           ! del extra point on fine grid 
     
    948889 
    949890   IF( jvar /= tl_multi%i_nvar )THEN 
    950       CALL logger_error("CREATE BOUNDARY: it seems some variable "//& 
    951          &  "can not be read") 
     891      CALL logger_error("CREATE BOUNDARY: it seems some variable can not be read") 
    952892   ENDIF 
     893 
     894   CALL var_clean(tl_seglvl1(:,:,:)) 
     895   DEALLOCATE( tl_seglvl1 ) 
    953896 
    954897   ! write file for each segment of each boundary 
    955898   DO jl=1,ip_ncard 
    956899      IF( tl_bdy(jl)%l_use )THEN 
     900 
     901         SELECT CASE(TRIM(tl_bdy(jk)%c_card)) 
     902         CASE('north','south') 
     903            il_dim=1 
     904         CASE('east','west') 
     905            il_dim=2 
     906         END SELECT    
    957907 
    958908         DO jk=1,tl_bdy(jl)%i_nseg 
     
    961911            &                               'T', tl_lon1, tl_lat1 ) 
    962912 
    963             ! force to use nav_lon, nav_lat as variable name 
    964             tl_lon1%c_name='nav_lon' 
    965             tl_lat1%c_name='nav_lat' 
    966  
    967913            ! del extra point on fine grid 
    968914            CALL dom_del_extra( tl_lon1, tl_segdom1(jp_T,jk,jl) ) 
     
    978924            CALL boundary_swap(tl_lat1, tl_bdy(jl)) 
    979925            DO jvar=1,tl_multi%i_nvar 
     926               CALL boundary_swap(tl_segvar1(jvar,jk,jl), tl_bdy(jl)) 
    980927 
    981928               ! use additional request 
    982                ! change unit and apply factor 
    983                CALL var_chg_unit(tl_segvar1(jvar,jk,jl)) 
    984  
    985929               ! forced min and max value 
    986930               CALL var_limit_value(tl_segvar1(jvar,jk,jl)) 
     
    989933               CALL filter_fill_value(tl_segvar1(jvar,jk,jl)) 
    990934 
    991                IF( .NOT. ln_extrap )THEN 
    992                   ! use mask 
    993                   SELECT CASE(TRIM(tl_segvar1(jvar,jk,jl)%c_point)) 
    994                   CASE DEFAULT !'T' 
    995                      jpoint=jp_T 
    996                   CASE('U') 
    997                      jpoint=jp_U 
    998                   CASE('V') 
    999                      jpoint=jp_V 
    1000                   CASE('F') 
    1001                      jpoint=jp_F 
    1002                   END SELECT 
    1003  
    1004                   CALL create_boundary_use_mask(tl_segvar1(jvar,jk,jl), & 
    1005                   &                             tl_seglvl1(jpoint,jk,jl)) 
    1006                ENDIF 
    1007  
    1008                ! swap dimension order 
    1009                CALL boundary_swap(tl_segvar1(jvar,jk,jl), tl_bdy(jl)) 
     935               ! extrapolate 
     936               CALL extrap_fill_value( tl_segvar1(jvar,jk,jl), & 
     937               &                       id_iext=in_extrap,      & 
     938               &                       id_jext=in_extrap,      & 
     939               &                       id_kext=in_extrap ) 
    1010940 
    1011941            ENDDO 
     
    1014944            ! create file structure 
    1015945            ! set file namearray of level variable structure 
    1016             IF( tl_bdy(jl)%i_nseg > 1 )THEN 
    1017                IF( ASSOCIATED(tl_time%d_value) )THEN 
    1018                   cl_fmt="('y',i0.4,'m',i0.2,'d',i0.2)" 
    1019                   tl_date=var_to_date(tl_time) 
    1020                   tl_date=tl_date+dn_dayofs 
    1021                   cl_date=date_print( tl_date, cl_fmt )  
    1022  
    1023                   cl_bdyout=boundary_set_filename( TRIM(cn_fileout), & 
    1024                   &                                TRIM(tl_bdy(jl)%c_card), jk,& 
    1025                   &                                cd_date=TRIM(cl_date) ) 
    1026                ELSE 
    1027                   cl_bdyout=boundary_set_filename( TRIM(cn_fileout), & 
    1028                   &                                TRIM(tl_bdy(jl)%c_card), jk ) 
    1029                ENDIF 
     946            IF( ASSOCIATED(tl_time%d_value) )THEN 
     947               cl_fmt="('y',i0.4,'m',i0.2,'d',i0.2)" 
     948               cl_date=date_print( var_to_date(tl_time), cl_fmt )  
     949 
     950               cl_bdyout=boundary_set_filename( TRIM(cn_fileout), & 
     951               &                                TRIM(tl_bdy(jl)%c_card), jk, TRIM(cl_date) ) 
    1030952            ELSE 
    1031                IF( ASSOCIATED(tl_time%d_value) )THEN 
    1032                   cl_fmt="('y',i0.4,'m',i0.2,'d',i0.2)" 
    1033                   tl_date=var_to_date(tl_time) 
    1034                   tl_date=tl_date+dn_dayofs 
    1035                   cl_date=date_print( tl_date, cl_fmt ) 
    1036  
    1037                   cl_bdyout=boundary_set_filename( TRIM(cn_fileout), & 
    1038                   &                                TRIM(tl_bdy(jl)%c_card), & 
    1039                   &                                cd_date=TRIM(cl_date) ) 
    1040                ELSE 
    1041                   cl_bdyout=boundary_set_filename( TRIM(cn_fileout), & 
    1042                   &                                TRIM(tl_bdy(jl)%c_card) ) 
    1043                ENDIF 
     953               cl_bdyout=boundary_set_filename( TRIM(cn_fileout), & 
     954               &                                TRIM(tl_bdy(jl)%c_card), jk ) 
    1044955            ENDIF 
    1045956            !  
     
    1049960            tl_dim(:)=var_max_dim(tl_segvar1(:,jk,jl)) 
    1050961 
     962            CALL dim_unorder(tl_dim(:)) 
    1051963            SELECT CASE(TRIM(tl_bdy(jl)%c_card)) 
    1052964               CASE DEFAULT ! 'north','south' 
    1053965                  cl_dimorder='xyzt' 
     966                  CALL dim_reorder(tl_dim(:),TRIM(cl_dimorder)) 
    1054967               CASE('east','west') 
    1055968                  cl_dimorder='yxzt' 
     969                  CALL dim_reorder(tl_dim(:),TRIM(cl_dimorder)) 
     970                  ! reorder coordinates dimension 
     971                  CALL var_reorder(tl_lon1,TRIM(cl_dimorder)) 
     972                  CALL var_reorder(tl_lat1,TRIM(cl_dimorder)) 
     973                  ! reorder other variable dimension 
     974                  DO jvar=1,tl_multi%i_nvar 
     975                     CALL var_reorder(tl_segvar1(jvar,jk,jl),TRIM(cl_dimorder)) 
     976                  ENDDO 
    1056977            END SELECT 
    1057978 
     
    1071992            ENDIF 
    1072993             
    1073  
    1074  
    1075994            IF( tl_dim(3)%l_use )THEN 
    1076                IF( ASSOCIATED(tl_depth%d_value) )THEN 
    1077                   ! add depth 
    1078                   CALL file_add_var(tl_fileout, tl_depth) 
    1079                ENDIF 
     995               ! add depth 
     996               CALL file_add_var(tl_fileout, tl_depth) 
    1080997            ENDIF 
    1081998 
    1082999            IF( tl_dim(4)%l_use )THEN 
    1083                IF( ASSOCIATED(tl_time%d_value) )THEN 
    1084                   ! add time 
    1085                   CALL file_add_var(tl_fileout, tl_time) 
    1086                ENDIF 
     1000               ! add time 
     1001               CALL file_add_var(tl_fileout, tl_time) 
    10871002            ENDIF 
    10881003 
    10891004            ! add other variable 
    1090             DO jvar=tl_multi%i_nvar,1,-1 
     1005            DO jvar=1,tl_multi%i_nvar 
    10911006               CALL file_add_var(tl_fileout, tl_segvar1(jvar,jk,jl)) 
    10921007               CALL var_clean(tl_segvar1(jvar,jk,jl)) 
     
    11331048 
    11341049            ! write file 
    1135             CALL iom_write_file(tl_fileout, cl_dimorder) 
     1050            CALL iom_write_file(tl_fileout) 
    11361051 
    11371052            ! close file 
     
    11511066   DEALLOCATE( tl_segdom1 ) 
    11521067   DEALLOCATE( tl_segvar1 ) 
    1153    CALL var_clean(tl_seglvl1(:,:,:)) 
    1154    DEALLOCATE( tl_seglvl1 ) 
    1155  
    11561068 
    11571069   CALL mpp_clean(tl_coord1) 
     
    11701082   !>  
    11711083   !> @author J.Paul 
    1172    !> @date November, 2013 - Initial Version 
     1084   !> - November, 2013- Initial Version 
    11731085   !> @date September, 2014 
    11741086   !> - take into account grid point to compute boundary indices 
     
    12741186   !------------------------------------------------------------------- 
    12751187   !> @brief 
    1276    !> This subroutine get coordinates over boundary domain 
     1188   !> This subroutine get coordinates over boudnary domain 
    12771189   !>  
    12781190   !> @author J.Paul 
    1279    !> @date November, 2013 - Initial Version 
    1280    !> @date September, 2014  
    1281    !> - take into account grid point 
     1191   !> - November, 2013- Initial Version 
     1192   !> @date September, 2014 - take into account grid point 
    12821193   !> 
    12831194   !> @param[in] td_coord1 coordinates file structure 
     
    13261237   !------------------------------------------------------------------- 
    13271238   !> @brief 
    1328    !> This subroutine interpolate variable on boundary 
     1239   !> This subroutine interpolate variable over boundary 
    13291240   !>  
    13301241   !> @details  
    13311242   !> 
    13321243   !> @author J.Paul 
    1333    !> @date November, 2013 - Initial Version 
     1244   !> - Nov, 2013- Initial Version 
    13341245   !> 
    13351246   !> @param[inout] td_var variable structure  
     
    13851296 
    13861297      ! extrapolate variable 
    1387       CALL extrap_fill_value( td_var ) 
     1298      CALL extrap_fill_value( td_var, id_iext=il_iext, id_jext=il_jext ) 
    13881299 
    13891300      ! interpolate Bathymetry 
     
    13921303 
    13931304      ! remove extraband 
    1394       CALL extrap_del_extrabands(td_var, il_iext*id_rho(jp_I), & 
    1395          &                               il_jext*id_rho(jp_J)) 
     1305      CALL extrap_del_extrabands(td_var, il_iext*id_rho(jp_I), il_jext*id_rho(jp_J)) 
    13961306 
    13971307   END SUBROUTINE create_boundary_interp 
     
    14071317   !> 
    14081318   !> @author J.Paul 
    1409    !> @date November, 2013 - Initial Version 
     1319   !> - November, 2013- Initial Version 
    14101320   !> 
    14111321   !> @param[in] td_var    variable structure  
     
    15121422   !> 
    15131423   !> @author J.Paul 
    1514    !> @date November, 2013 - Initial Version 
     1424   !> - November, 2013- Initial Version 
    15151425   !> 
    15161426   !> @param[inout] td_var variable structure  
     
    15651475   !> 
    15661476   !> @author J.Paul 
    1567    !> @date November, 2013 - Initial Version 
     1477   !> - November, 2013- Initial Version 
    15681478   !> 
    15691479   !> @param[in] td_level  array of level variable structure 
     
    16271537   !> 
    16281538   !> @author J.Paul 
    1629    !> @date November, 2014 - Initial Version 
     1539   !> - November, 2014- Initial Version 
    16301540   !> 
    16311541   !> @param[in] td_mpp       mpp structure 
     
    16781588   !> 
    16791589   !> @author J.Paul 
    1680    !> @date November, 2014 - Initial Version 
     1590   !> - November, 2014- Initial Version 
    16811591   !> 
    16821592   !> @param[in] td_mpp      mpp structure 
Note: See TracChangeset for help on using the changeset viewer.