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 10398 – NEMO

Changeset 10398


Ignore:
Timestamp:
2018-12-14T17:51:51+01:00 (5 years ago)
Author:
clem
Message:

BGC restart should now work in the nesting tool. All of that must of course be tested in realistic simulations. Waiting for the feedbacks...

Location:
utils/tools/NESTING
Files:
6 edited

Legend:

Unmodified
Added
Removed
  • utils/tools/NESTING/namelist_nordic1

    r10383 r10398  
    9898&restart_trc 
    9999    restart_trc_file = 'restart_trc.nc'    
     100    interp_type = 'bilinear' 
    100101/  
    101102 
  • utils/tools/NESTING/namelist_nordic1_update

    r10383 r10398  
    9999&restart_trc 
    100100    restart_trc_file = 'restart_trc.nc'    
     101    interp_type = 'bilinear' 
    101102/  
    102103 
  • utils/tools/NESTING/namelist_nordic2

    r10383 r10398  
    9999&restart_trc 
    100100    restart_trc_file = 'restart_trc.nc'    
     101    interp_type = 'bilinear' 
    101102/  
    102103 
  • utils/tools/NESTING/src/agrif_create_restart.f90

    r10393 r10398  
    4040  CHARACTER*1 :: posvar 
    4141  CHARACTER*100 :: Child_file,Childcoordinates,varname,Child_Bathy_Level,Child_Bathy_Meter    
    42   REAL*8, POINTER, DIMENSION(:,:) :: lonChild,latChild => NULL() 
    43   REAL*8, POINTER, DIMENSION(:,:) :: lonParent,latParent => NULL() 
    44   REAL*8, POINTER, DIMENSION(:,:,:) :: tabvar3d,tabinterp3d,mask => NULL() 
    45   REAL*8, POINTER, DIMENSION(:,:,:) :: fmask,fse3u,fse3v,fse3t => NULL() 
     42  REAL*8, POINTER, DIMENSION(:,:,:) :: tabvar3d => NULL() 
    4643  REAL*8, POINTER, DIMENSION(:,:,:,:) :: un,ub,vn,vb,tn,tb,sn,sb,e3t_n,e3t_b => NULL() 
    4744  REAL*8, POINTER, DIMENSION(:,:,:) :: sshn,sshb => NULL()       
    4845  REAL*8, POINTER, DIMENSION(:,:,:,:) :: tabinterp4d,tabvar1,tabvar2,tabvar3 => NULL() 
    49   REAL*8, POINTER, DIMENSION(:) :: timedepth_temp => NULL() 
    5046  REAL*8, POINTER, DIMENSION(:) :: tabtemp1D,nav_lev => NULL() 
    51   INTEGER, POINTER, DIMENSION(:) :: tabtemp1DInt => NULL() 
    52   REAL*8, POINTER, DIMENSION(:,:) :: tabtemp2D,zwf => NULL() 
    53   REAL*8, POINTER, DIMENSION(:,:) :: e1f,e2f,e1v,e2v,e1u,e2u,e1t,e2t => NULL() 
     47  REAL*8, POINTER, DIMENSION(:,:) :: tabtemp2D => NULL() 
    5448  REAL*8, POINTER, DIMENSION(:,:,:,:) :: tabtemp4D => NULL() 
    5549  INTEGER,DIMENSION(:),POINTER :: src_add,dst_add  => NULL() 
    56   REAL*8,DIMENSION(:,:),POINTER :: matrix,bathy_G0 => NULL() 
    57   LOGICAL,DIMENSION(:,:,:),POINTER :: Tmask => NULL() 
     50  REAL*8,DIMENSION(:,:),POINTER :: matrix => NULL() 
    5851  LOGICAL,DIMENSION(:,:),POINTER :: masksrc => NULL() 
    5952  LOGICAL, DIMENSION(:,:,:), POINTER :: detected_pts 
    60   LOGICAL :: Interpolation,Extrapolation,Pacifique,op 
    61   REAL*8 :: za1,za0,zsur,zacr,zkth,zdepth,zdepwp,zmin,zmax,zdiff,ze3tp,ze3wp        
    62   INTEGER :: narg,iargc,ncid,x,y,z,z_a,x_a,y_a,z_b,nbvert_lev,m 
     53  LOGICAL :: Interpolation,Extrapolation,Pacifique 
     54  INTEGER :: narg,iargc,ncid,x,y,z,z_a,x_a,y_a,z_b,nbvert_lev 
    6355  REAL*8 :: now_wght,before_wght 
    64   INTEGER :: i,j,k,status,ji,jj 
     56  INTEGER :: status,ii,jk 
    6557  CHARACTER(len=20),DIMENSION(4) :: dimnames 
    6658  CHARACTER(len=80) :: namelistname 
    6759  TYPE(Coordinates) :: G0,G1 
    68   INTEGER :: jpi,jpj,jpk,jpni,jpnj,jpnij,jpiglo,jpjglo,nlcit,nlcjt,nldit 
    69   INTEGER :: nldjt,nleit,nlejt,nimppt,njmppt 
    7060  REAL*8 :: tabtemp0dreal 
    71   INTEGER :: tabtemp0dint 
    7261  CHARACTER(len=20) :: timedimname 
    7362 
    7463  LOGICAL, PARAMETER :: conservation = .FALSE. 
    7564  !       
    76   ! Variables for dimg 
    77   !  
    78 !  INTEGER :: ino0, it0, ipcg0, isor0, itke0,nfice,nfbulk 
    79 !  INTEGER :: irecl8, irec,ndastp,narea,nsolv 
    80 !  INTEGER :: jk,kt            ! dummy loop indices 
    81 !  INTEGER :: inum             ! temporary logical unit 
    82 !  INTEGER :: ios1 , ios2      ! flag for ice and bulk in the current run 
    83 !  INTEGER :: ios3             ! flag for free surface.  0 = none 1 = yes.  0 = none 1 = yes 
    84 !  INTEGER :: ios4             ! flag for coupled (1) or not (0)     
    8565  !        
    8666  narg = iargc() 
     
    182162  G0%tmask = 1.     
    183163 
    184   DO k=1,z 
     164  DO jk=1,z 
    185165     ALLOCATE(tabvar1(x,y,1,1)) 
    186      CALL Read_Ncdf_var('sn',TRIM(restart_file),tabvar1,1,k) 
     166     CALL Read_Ncdf_var('sn',TRIM(restart_file),tabvar1,1,jk) 
    187167     WHERE( tabvar1(:,:,1,1) == 0. )  
    188         G0%tmask(:,:,k) = 0. 
     168        G0%tmask(:,:,jk) = 0. 
    189169     END WHERE 
    190170     DEALLOCATE(tabvar1) 
     
    219199  ! 
    220200  ! 
    221   DO ji = 1,SIZE(Ncdf_varname)       
     201  DO ii = 1,SIZE(Ncdf_varname)       
    222202     !       
    223203     ! loop on variables names 
    224      varname = TRIM(Ncdf_varname(ji)) 
     204     varname = TRIM(Ncdf_varname(ii)) 
    225205     WRITE(*,*) 'var = ',TRIM(varname)      
    226206     !       
  • utils/tools/NESTING/src/agrif_create_restart_ice.f90

    r10393 r10398  
    4040  CHARACTER*1 :: posvar 
    4141  CHARACTER*100 :: Child_file,Childcoordinates,varname,Child_Bathy_Level,Child_Bathy_Meter    
    42   REAL*8, POINTER, DIMENSION(:,:,:) :: tabvar00, tabvar3d,tabinterp3d,mask => NULL() 
     42  REAL*8, POINTER, DIMENSION(:,:,:) :: tabvar00, tabvar3d,mask => NULL() 
    4343  REAL*8, POINTER, DIMENSION(:,:,:,:) :: tabinterp4d,tabvar0,tabvar1,tabvar2,tabvar3 => NULL() 
    4444  REAL*8, POINTER, DIMENSION(:) :: tabtemp1D,nav_lev => NULL() 
    45   INTEGER, POINTER, DIMENSION(:) :: tabtemp1DInt => NULL() 
    46   REAL*8, POINTER, DIMENSION(:,:) :: tabtemp2D,zwf => NULL() 
    47   REAL*8, POINTER, DIMENSION(:,:) :: e1f,e2f,e1v,e2v,e1u,e2u,e1t,e2t => NULL() 
    48   REAL*8, POINTER, DIMENSION(:,:,:,:) :: tabtemp4D => NULL() 
     45  REAL*8, POINTER, DIMENSION(:,:) :: tabtemp2D => NULL() 
    4946  INTEGER,DIMENSION(:),POINTER :: src_add,dst_add  => NULL() 
    5047  REAL*8,DIMENSION(:,:),POINTER :: matrix => NULL() 
     
    5350  LOGICAL :: Interpolation,Extrapolation,Pacifique 
    5451  INTEGER :: narg,iargc,ncid,x,y,z 
    55   INTEGER :: ji,jl,status,varid,numdims 
     52  INTEGER :: ii,jl,status,varid,numdims 
    5653  CHARACTER(len=20),DIMENSION(4) :: dimnames 
    5754  CHARACTER(len=80) :: namelistname 
    5855  TYPE(Coordinates) :: G0,G1 
    59   INTEGER :: jpl,jpiglo,jpjglo 
     56  INTEGER :: jpl  
    6057  REAL*8 :: tabtemp0dreal 
    61   INTEGER :: tabtemp0dint 
    6258 
    6359  LOGICAL, PARAMETER :: conservation = .FALSE. 
     
    147143  ! 
    148144  ! 
    149   DO ji = 1,SIZE(Ncdf_varname)       
     145  DO ii = 1,SIZE(Ncdf_varname)       
    150146     !       
    151147     ! loop on variables names 
    152      varname = TRIM(Ncdf_varname(ji)) 
     148     varname = TRIM(Ncdf_varname(ii)) 
    153149     !       
    154150     WRITE(*,*) 'var = ',TRIM(varname)      
  • utils/tools/NESTING/src/agrif_create_restart_trc.f90

    r10381 r10398  
    1717  USE agrif_interpolation 
    1818  USE agrif_partial_steps         
     19  USE agrif_connect_topo 
    1920  ! 
    2021  IMPLICIT NONE 
     
    4041  CHARACTER*3 :: prefix 
    4142  CHARACTER*20:: suffix  
    42   CHARACTER*100 :: Child_file,Childcoordinates,varname,varname2,Childbathy,Childbathymeter    
    43   REAL*8, POINTER, DIMENSION(:,:,:) :: fse3u, fse3v,fse3t => NULL() 
    44   REAL*8, POINTER, DIMENSION(:,:) :: lonChild,latChild => NULL() 
    45   REAL*8, POINTER, DIMENSION(:,:) :: lonParent,latParent => NULL() 
    46   REAL*8, POINTER, DIMENSION(:,:,:) :: cvol => NULL() 
    47   REAL*8, POINTER, DIMENSION(:,:,:) :: tabvar3d,tabinterp3d,mask => NULL() 
     43  CHARACTER*100 :: Child_file,Childcoordinates,varname,varname2,Child_Bathy_Level,Child_Bathy_Meter    
     44  REAL*8, POINTER, DIMENSION(:,:,:) :: tabvar3d => NULL() 
    4845  REAL*8, POINTER, DIMENSION(:,:,:,:) :: trb,trn => NULL() 
    4946  REAL*8, POINTER, DIMENSION(:,:,:,:) :: tabinterp4d,tabvar1,tabvar2,tabvar3 => NULL() 
    50   REAL*8, POINTER, DIMENSION(:) :: timedepth_temp => NULL() 
    5147  REAL*8, POINTER, DIMENSION(:) :: tabtemp1D,nav_lev => NULL() 
    52   INTEGER, POINTER, DIMENSION(:) :: tabtemp1DInt => NULL() 
    53   REAL*8, POINTER, DIMENSION(:,:) :: tabtemp2D,zwf => NULL() 
    54   REAL*8, POINTER, DIMENSION(:,:) :: e1f,e2f,e1v,e2v,e1u,e2u,e1t,e2t => NULL() 
    55   REAL*8, POINTER, DIMENSION(:,:,:,:) :: tabtemp4D => NULL() 
     48  REAL*8, POINTER, DIMENSION(:,:) :: tabtemp2D => NULL() 
    5649  INTEGER,DIMENSION(:),POINTER :: src_add,dst_add  => NULL() 
    57   REAL*8,DIMENSION(:,:),POINTER :: matrix,bathy_G0 => NULL() 
    58   LOGICAL,DIMENSION(:,:,:),POINTER :: Tmask => NULL() 
     50  REAL*8,DIMENSION(:,:),POINTER :: matrix => NULL() 
    5951  LOGICAL,DIMENSION(:,:),POINTER :: masksrc => NULL() 
    6052  LOGICAL, DIMENSION(:,:,:), POINTER :: detected_pts 
    61   LOGICAL :: Interpolation,Extrapolation,Pacifique,op 
    62   REAL*8 :: za1,za0,zsur,zacr,zkth,zdepth,zdepwp,zmin,zmax,zdiff,ze3tp,ze3wp,ztrcor,zvolk 
    63   INTEGER :: narg,iargc,ncid,x,y,t,z,nbvert_lev,m 
    64   REAL*8 :: now_wght,before_wght, ztrmas,zcoef 
    65   INTEGER :: i,j,k,ji,jj,jk,status,varid,numdims 
     53  LOGICAL :: Interpolation,Extrapolation,Pacifique 
     54  INTEGER :: narg,iargc,ncid,x,y,z,nbvert_lev 
     55  REAL*8 :: now_wght,before_wght 
     56  INTEGER :: ii,ji,jj,jk,status,varid,numdims 
    6657  CHARACTER(len=20),DIMENSION(4) :: dimnames 
    6758  CHARACTER(len=80) :: namelistname 
    6859  TYPE(Coordinates) :: G0,G1 
    69   INTEGER :: jpi,jpj,jpk,jpni,jpnj,jpnij,jpiglo,jpjglo,nlcit,nlcjt,nldit 
    70   INTEGER :: nldjt,nleit,nlejt,nimppt,njmppt 
    7160  REAL*8 :: tabtemp0dreal 
    72   INTEGER :: tabtemp0dint 
    73   CHARACTER(len=20) :: timedimname 
    74  
     61 
     62  LOGICAL, PARAMETER :: conservation = .FALSE. 
    7563  !        
    7664  narg = iargc() 
     
    9078  ENDIF 
    9179 
    92   timedimname = 't' 
    93  
    9480  ! 
    9581  WRITE(*,*) '' 
     
    10086  !        
    10187  CALL set_child_name(parent_coordinate_file,Childcoordinates)    
    102   CALL set_child_name(parent_bathy_level,Childbathy)  
    103   CALL set_child_name(parent_bathy_meter,Childbathymeter)    
     88  IF( TRIM(parent_bathy_level) /= '' )   CALL set_child_name(parent_bathy_level,Child_Bathy_Level)  
     89  IF( TRIM(parent_bathy_meter) /= '' )   CALL set_child_name(parent_bathy_meter,Child_Bathy_Meter)    
    10490  ! 
    10591  ! create this file 
     
    115101  CALL Read_Ncdf_dim('x',restart_trc_file,x) 
    116102  CALL Read_Ncdf_dim('y',restart_trc_file,y)  
    117   CALL Read_Ncdf_dim('z',restart_trc_file,z) 
     103  CALL Read_Ncdf_dim('nav_lev',restart_trc_file,z) 
    118104 
    119105  IF( z .NE. N ) THEN 
     
    142128  ENDIF 
    143129  ! 
     130  ! one needs bathy_level 
     131  IF( TRIM(parent_bathy_level) /= '' ) THEN 
     132     status = Read_bathy_level(TRIM(parent_bathy_level),G0) 
     133     status = Read_bathy_level(TRIM(child_bathy_level),G1) 
     134  ELSE 
     135     status = read_bathy_meter(TRIM(parent_bathy_meter),G0) 
     136     status = read_bathy_meter(TRIM(child_bathy_meter),G1) 
     137     CALL meter_to_levels(G0) 
     138     CALL meter_to_levels(G1) 
     139  ENDIF 
     140  ! get masks 
    144141  CALL Init_tmask(parent_bathy_level,G0,x,y) 
    145   CALL Init_tmask(childbathy,G1,nxfin,nyfin) 
     142  CALL Init_tmask(child_bathy_level,G1,nxfin,nyfin) 
    146143   
    147   ALLOCATE(fse3u(nxfin,nyfin,z),fse3v(nxfin,nyfin,z),fse3t(nxfin,nyfin,z),cvol(nxfin,nyfin,z)) 
    148     !       
    149     status = Read_Bathy_Meter(TRIM(Childbathymeter),G1) 
    150     CALL get_scale_factors( G1,fse3t,fse3u,fse3v ) 
    151                            
    152   DO jk =1,z 
    153   cvol(:,:,jk) = G1%e1t(:,:)*G1%e2t(:,:)*fse3t(:,:,jk)*G1%tmask(:,:,jk) 
    154   END DO  
    155 !  CALL Init_mask(childbathy,G1,1,1) 
    156  
    157   G0%tmask = 1.     
    158  
    159  
     144!!clem  G0%tmask = 1.     
     145 
     146  ! which dataset 
    160147  status = nf90_open(TRIM(restart_trc_file), NF90_NOWRITE, ncid) ! Open dataset 
    161   DO k=1,z 
     148  DO jk = 1, z 
    162149     ALLOCATE(tabvar1(x,y,1,1)) 
    163150     ! 
    164151     status = nf90_inq_varid(ncid, "TRNDIC", VarId) !PISCES 
    165152     IF (status == nf90_noerr) THEN 
    166         CALL Read_Ncdf_var('TRNDIC',TRIM(restart_trc_file),tabvar1,1,k) 
     153        CALL Read_Ncdf_var('TRNDIC',TRIM(restart_trc_file),tabvar1,1,jk) 
    167154     ELSE 
    168155        status = nf90_inq_varid(ncid, "TRNNO3"  , VarId) ! LOBSTER 
    169156        IF (status == nf90_noerr) THEN 
    170            CALL Read_Ncdf_var('TRNNO3',TRIM(restart_trc_file),tabvar1,1,k) 
     157           CALL Read_Ncdf_var('TRNNO3',TRIM(restart_trc_file),tabvar1,1,jk) 
    171158        ELSE 
    172159           status = nf90_inq_varid(ncid, "TRNCFC11", VarId) ! CFC 
    173160           IF (status == nf90_noerr) THEN 
    174               CALL Read_Ncdf_var('TRNCFC11',TRIM(restart_trc_file),tabvar1,1,k) 
     161              CALL Read_Ncdf_var('TRNCFC11',TRIM(restart_trc_file),tabvar1,1,jk) 
    175162           ELSE 
    176163              status = nf90_inq_varid(ncid, "TRNCLR  ", VarId) ! My TRC 
    177164              IF (status == nf90_noerr) THEN 
    178                  CALL Read_Ncdf_var('TRNCLR',TRIM(restart_trc_file),tabvar1,1,k) 
     165                 CALL Read_Ncdf_var('TRNCLR',TRIM(restart_trc_file),tabvar1,1,jk) 
    179166              ELSE 
    180167                 WRITE(*,*) 'No suitable tracer found to build the mask ' 
     
    184171     ENDIF 
    185172     WHERE( tabvar1(:,:,1,1) == 0. )  
    186         G0%tmask(:,:,k) = 0. 
     173        G0%tmask(:,:,jk) = 0. 
    187174     END WHERE 
    188175     DEALLOCATE(tabvar1) 
     
    191178  ! 
    192179  ! write dimensions in output file 
     180  WRITE(*,*) 'write dimensions' 
    193181  !           
    194182  CALL Write_Ncdf_dim('x',Child_file,nxfin) 
    195183  CALL Write_Ncdf_dim('y',Child_file,nyfin) 
    196   CALL Write_Ncdf_dim('z',Child_file,z) 
    197   CALL Write_Ncdf_dim(TRIM(timedimname),Child_file,0)  
    198   ! 
    199   ! 
    200   VARIABLE :  DO i = 1,SIZE(Ncdf_varname)       
     184  CALL Write_Ncdf_dim('nav_lev',Child_file,z) 
     185  CALL Write_Ncdf_dim('time_counter',Child_file,0)  
     186  ! 
     187  ! 
     188  DO ii = 1,SIZE(Ncdf_varname)       
    201189     !       
    202190     ! loop on variables names 
     191     varname = TRIM(Ncdf_varname(ii)) 
     192     WRITE(*,*) 'var = ',TRIM(varname)      
    203193     !       
    204      SELECT CASE (TRIM(Ncdf_varname(i))) 
    205         ! 
    206         !copy nav_lon from child coordinates to output file       
     194     SELECT CASE (TRIM(varname)) 
    207195        ! 
    208196     CASE('nav_lon') 
    209         WRITE(*,*) 'copy nav_lon' 
    210197        CALL Read_Ncdf_var('nav_lon',TRIM(Childcoordinates),tabtemp2D)  
    211198        CALL Write_Ncdf_var('nav_lon',(/'x','y'/),Child_file,tabtemp2D,'float') 
    212         CALL Copy_Ncdf_att('nav_lon',TRIM(restart_trc_file),Child_file, & 
    213              MINVAL(tabtemp2D),MAXVAL(tabtemp2D)) 
     199        CALL Copy_Ncdf_att('nav_lon',TRIM(restart_trc_file),Child_file,MINVAL(tabtemp2D),MAXVAL(tabtemp2D)) 
    214200        DEALLOCATE(tabtemp2D) 
    215201        Interpolation = .FALSE. 
    216202        !         
    217         !copy nav_lat from child coordinates to output file 
    218         ! 
    219203     CASE('nav_lat')              
    220         WRITE(*,*) 'copy nav_lat' 
    221204        CALL Read_Ncdf_var('nav_lat',TRIM(Childcoordinates),tabtemp2D)  
    222205        CALL Write_Ncdf_var('nav_lat',(/'x','y'/),Child_file,tabtemp2D,'float') 
    223         CALL Copy_Ncdf_att('nav_lat',TRIM(restart_trc_file),Child_file, & 
    224              MINVAL(tabtemp2D),MAXVAL(tabtemp2D))  
     206        CALL Copy_Ncdf_att('nav_lat',TRIM(restart_trc_file),Child_file,MINVAL(tabtemp2D),MAXVAL(tabtemp2D))  
    225207        DEALLOCATE(tabtemp2D) 
    226208        Interpolation = .FALSE. 
    227209        ! 
    228         !copy nav_lev from restart_file to output file 
    229         ! 
    230210     CASE('nav_lev') 
    231  
    232         WRITE(*,*) 'copy nav_lev' 
    233211        CALL Read_Ncdf_var('nav_lev',TRIM(restart_trc_file),nav_lev)  
    234212        CALL Write_Ncdf_var('nav_lev','z',Child_file,nav_lev,'float') 
     
    236214        Interpolation = .FALSE. 
    237215        ! 
    238         !copy time from restart_file to output file                        
    239         ! 
    240216     CASE('time_counter') 
    241         WRITE(*,*) 'copy time_counter' 
    242217        CALL Read_Ncdf_var('time_counter',TRIM(restart_trc_file),tabtemp1D)  
    243218        tabtemp1D = tabtemp1D * rhot 
    244         CALL Write_Ncdf_var('time_counter',TRIM(timedimname),Child_file,tabtemp1D,'double') 
     219        CALL Write_Ncdf_var('time_counter','time_counter',Child_file,tabtemp1D,'double') 
    245220        CALL Copy_Ncdf_att('time_counter',TRIM(restart_trc_file),Child_file)  
    246221        DEALLOCATE(tabtemp1D) 
    247222        Interpolation = .FALSE. 
    248223        ! 
    249         !copy info from restart_file to output file 
    250         ! 
    251      CASE('arak0')  
    252         WRITE(*,*) 'copy trp info'         
    253         CALL Read_Ncdf_var('arak0',TRIM(restart_trc_file),tabtemp0dreal)  
    254         CALL Write_Ncdf_var('arak0',Child_file,tabtemp0dreal,'double') 
    255         CALL Copy_Ncdf_att('arak0',TRIM(restart_trc_file),Child_file)  
    256         Interpolation = .FALSE.  
    257         ! 
    258      CASE('kt')  
    259         WRITE(*,*) 'copy kt' 
    260         CALL Read_Ncdf_var('kt',TRIM(restart_trc_file),tabtemp0dreal)   
    261         tabtemp0dreal = tabtemp0dreal * rhot 
    262         CALL Write_Ncdf_var('kt',Child_file,tabtemp0dreal,'double') 
    263         CALL Copy_Ncdf_att('kt',TRIM(restart_trc_file),Child_file)  
     224     CASE('kt','ndastp','adatrj','ntime','rdttrc1')  
     225        CALL Read_Ncdf_var(TRIM(varname),TRIM(restart_trc_file),tabtemp0dreal)   
     226        SELECT CASE (TRIM(varname)) 
     227        CASE('rdttrc1') 
     228           tabtemp0dreal = tabtemp0dreal / rhot 
     229        CASE('kt') 
     230           tabtemp0dreal = tabtemp0dreal * rhot 
     231        END SELECT 
     232        CALL Write_Ncdf_var(TRIM(varname),Child_file,tabtemp0dreal,'double') 
     233        CALL Copy_Ncdf_att(varname,TRIM(restart_trc_file),Child_file)  
    264234        Interpolation = .FALSE. 
    265235        ! 
    266236     CASE DEFAULT 
    267         varname = Ncdf_varname(i)  
    268         WRITE(*,*) TRIM(varname),' interpolation ...'      
    269         vert_coord_name = 'z' 
     237        IF( Get_NbDims(TRIM(varname),TRIM(restart_trc_file)) == 4 ) THEN 
     238           vert_coord_name = 'nav_lev' 
     239        ELSEIF( Get_NbDims(TRIM(varname),TRIM(restart_trc_file)) == 3 ) THEN 
     240           vert_coord_name = '1' 
     241        ENDIF 
    270242        posvar='T' 
    271243        Interpolation = .TRUE.             
    272244        !       
    273245     END SELECT 
     246     !       
     247     ! --- start interpolation --- ! 
    274248     IF( Interpolation ) THEN 
    275249        !         
    276         nbvert_lev = z  
    277         !                   
    278         t = 1 
     250        IF( vert_coord_name == '1' ) THEN 
     251           nbvert_lev = 1 
     252        ELSE 
     253           nbvert_lev = z 
     254        ENDIF 
    279255 
    280256        ALLOCATE(detected_pts(SIZE(G0%tmask,1),SIZE(G0%tmask,2),nbvert_lev))                              
     
    288264        DO n = 1,nbvert_lev 
    289265           ! 
    290            WRITE(*,*) 'interpolate/extrapolate ', & 
    291                 TRIM(varname),' for vertical level = ',n    
    292            ! 
    293            CALL Read_Ncdf_var(varname,TRIM(restart_trc_file),tabvar1,t,n) 
     266           WRITE(*,*) 'interpolate/extrapolate for vertical level = ',n    
     267           ! 
     268           CALL Read_Ncdf_var(varname,TRIM(restart_trc_file),tabvar1,1,n) 
    294269           IF(n==1) THEN 
    295270              !                             
     
    308283              CALL extrap_detect(G0,G1,detected_pts(:,:,n),n)                                             
    309284 
    310               CALL correct_field(detected_pts(:,:,n),tabvar1,tabvar2,& 
    311                    tabvar3,G0,nav_lev,masksrc,n)                                  
    312  
     285              CALL correct_field(detected_pts(:,:,n),tabvar1,tabvar2,tabvar3,G0,nav_lev,masksrc,n)                                  
     286               
     287              ! for the following variables, you do not want to mask the values 
     288              IF(  TRIM(varname) == 'Silicalim' .OR. TRIM(varname) == 'Silicamax' ) THEN 
     289                 masksrc(:,:) = .TRUE. 
     290              ENDIF 
     291               
    313292              SELECT CASE(TRIM(interp_type)) 
    314293              CASE('bilinear')                                                        
     
    324303              END SELECT 
    325304              !                       
    326               CALL Correctforconservation(tabvar1(:,:,1,1),tabinterp4d(:,:,1,1), & 
    327                    G0%e1t,G0%e2t,G1%e1t,G1%e2t,nxfin,nyfin,posvar,imin-jpizoom+1,jmin-jpjzoom+1) 
    328            ENDIF 
    329  
    330            tabinterp4d(:,:,1,1) =  tabinterp4d(:,:,1,1) * G1%tmask(:,:,n) 
    331            ztrmas = 0.0 
    332            ztrcor = 0.0 
    333            DO jj=1, nyfin 
    334            DO ji=1, nxfin 
    335               zvolk = cvol(ji,jj,n) 
    336               ztrcor = ztrcor + MIN( 0., tabinterp4d(ji,jj,1,1) ) * zvolk 
    337               tabinterp4d(ji,jj,1,1) = MAX( 0., tabinterp4d(ji,jj,1,1))  
    338               ztrmas  = ztrmas + tabinterp4d(ji,jj,1,1)  * zvolk 
    339            END DO 
    340            END DO 
    341            IF( ztrcor .LT. 0. ) THEN 
    342                WRITE(*,*) 'Correcting negative concentration'     
    343                zcoef = 1. + ztrcor / ztrmas 
    344                tabinterp4d(:,:,1,1) =  tabinterp4d(:,:,1,1) *zcoef * G1%tmask(:,:,n)                
    345            ENDIF         
    346            IF(MINVAL(tabinterp4d(:,:,1,1)) .LT.0. ) STOP 
    347  
    348            ! 
    349  
    350            status = nf90_inq_varid(ncid,TRIM(varname) , VarId) 
    351            status = nf90_inquire_variable(ncid, VarId, ndims=numdims) 
    352            IF( numdims == 3) THEN 
    353               dimnames(1)='x' 
    354               dimnames(2)='y' 
    355               dimnames(3)=TRIM(timedimname) 
     305              IF( conservation ) THEN ! clem: it currently does not work 
     306                 CALL Correctforconservation(tabvar1(:,:,1,1),tabinterp4d(:,:,1,1), & 
     307                    G0%e1t,G0%e2t,G1%e1t,G1%e2t,nxfin,nyfin,posvar,imin-jpizoom+1,jmin-jpjzoom+1) 
     308              ENDIF 
     309           ENDIF 
     310 
     311           IF( ALL(masksrc) ) THEN 
     312              tabinterp4d(:,:,1,1) =  tabinterp4d(:,:,1,1) 
     313           ELSE 
     314              tabinterp4d(:,:,1,1) =  tabinterp4d(:,:,1,1) * G1%tmask(:,:,n) 
     315           ENDIF 
     316 
     317           ! 
     318           dimnames(1)='x' 
     319           dimnames(2)='y' 
     320           IF( vert_coord_name == '1' ) THEN 
     321              dimnames(3)='time_counter' 
     322               
    356323              ALLOCATE(tabvar3d(SIZE(tabinterp4d,1),SIZE(tabinterp4d,2),SIZE(tabinterp4d,3))) 
    357324              tabvar3d=tabinterp4d(:,:,:,1) 
    358               CALL Write_Ncdf_var(TRIM(varname),dimnames, & 
    359                    Child_file,tabvar3d,t,'double') 
     325              CALL Write_Ncdf_var(TRIM(varname),dimnames,Child_file,tabvar3d,1,'double') 
    360326              DEALLOCATE(tabvar3d) 
    361            ELSE        
    362               dimnames(1)='x' 
    363               dimnames(2)='y' 
     327           ELSE 
    364328              dimnames(3)=vert_coord_name 
    365               dimnames(4)=TRIM(timedimname) 
    366               CALL Write_Ncdf_var(TRIM(varname),dimnames, & 
    367                    Child_file,tabinterp4d,t,n,'double') 
    368            ENDIF 
     329              dimnames(4)='time_counter' 
     330               
     331              CALL Write_Ncdf_var(TRIM(varname),dimnames,Child_file,tabinterp4d,1,n,'double') 
     332           ENDIF 
     333           !              
    369334           ! 
    370335           CALL Copy_Ncdf_att(TRIM(varname),TRIM(restart_trc_file),Child_file) 
    371336           ! 
     337           ! 
    372338           IF(ASSOCIATED(matrix)) DEALLOCATE(matrix,src_add,dst_add)    
    373339           ! 
    374            IF( numdims == 3) CYCLE VARIABLE 
    375340           ! 
    376341        END DO 
     
    383348     ENDIF 
    384349 
     350     ! change the before fields 
    385351     prefix = varname(1:3) 
    386352     suffix = varname(4:LEN_TRIM(varname))    
     
    388354     IF(rhot == 1 .OR. prefix/= 'TRB') THEN 
    389355        WRITE(*,*) ''     
    390         WRITE(*,*) 'no time interpolation for', varname 
     356        WRITE(*,*) 'no time interpolation for ',TRIM(varname) 
    391357     ELSE    
    392         WRITE(*,*) '' 
    393         WRITE(*,*) 'time interpolation for', varname 
    394358        ALLOCATE(trn(nxfin,nyfin,z,1),trb(nxfin,nyfin,z,1)) 
    395359        varname2 = 'TRN'//TRIM(suffix) 
     
    403367        dimnames(1)='x' 
    404368        dimnames(2)='y' 
    405         dimnames(3)='z' 
    406         dimnames(4)=TRIM(timedimname) 
     369        dimnames(3)='nav_lev' 
     370        dimnames(4)='time_counter' 
    407371        CALL Write_Ncdf_var(TRIM(varname),dimnames,Child_file,trb,'double') 
     372        DEALLOCATE(trn,trb) 
    408373        !     
    409374     ENDIF 
    410375 
    411   END DO VARIABLE 
    412   ! 
     376  END DO 
     377  ! 
     378  WRITE(*,*) ' ' 
     379  WRITE(*,*) ' --- list of all the variables that have been interpolated --- ' 
     380  WRITE(*,*) Ncdf_varname 
    413381  WRITE(*,*) ' ' 
    414382  WRITE(*,*) '******* restart file successfully created *******'  
Note: See TracChangeset for help on using the changeset viewer.