Changeset 10398 for utils/tools/NESTING
- Timestamp:
- 2018-12-14T17:51:51+01:00 (6 years ago)
- Location:
- utils/tools/NESTING
- Files:
-
- 6 edited
Legend:
- Unmodified
- Added
- Removed
-
utils/tools/NESTING/namelist_nordic1
r10383 r10398 98 98 &restart_trc 99 99 restart_trc_file = 'restart_trc.nc' 100 interp_type = 'bilinear' 100 101 / 101 102 -
utils/tools/NESTING/namelist_nordic1_update
r10383 r10398 99 99 &restart_trc 100 100 restart_trc_file = 'restart_trc.nc' 101 interp_type = 'bilinear' 101 102 / 102 103 -
utils/tools/NESTING/namelist_nordic2
r10383 r10398 99 99 &restart_trc 100 100 restart_trc_file = 'restart_trc.nc' 101 interp_type = 'bilinear' 101 102 / 102 103 -
utils/tools/NESTING/src/agrif_create_restart.f90
r10393 r10398 40 40 CHARACTER*1 :: posvar 41 41 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() 46 43 REAL*8, POINTER, DIMENSION(:,:,:,:) :: un,ub,vn,vb,tn,tb,sn,sb,e3t_n,e3t_b => NULL() 47 44 REAL*8, POINTER, DIMENSION(:,:,:) :: sshn,sshb => NULL() 48 45 REAL*8, POINTER, DIMENSION(:,:,:,:) :: tabinterp4d,tabvar1,tabvar2,tabvar3 => NULL() 49 REAL*8, POINTER, DIMENSION(:) :: timedepth_temp => NULL()50 46 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() 54 48 REAL*8, POINTER, DIMENSION(:,:,:,:) :: tabtemp4D => NULL() 55 49 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() 58 51 LOGICAL,DIMENSION(:,:),POINTER :: masksrc => NULL() 59 52 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 63 55 REAL*8 :: now_wght,before_wght 64 INTEGER :: i,j,k,status,ji,jj56 INTEGER :: status,ii,jk 65 57 CHARACTER(len=20),DIMENSION(4) :: dimnames 66 58 CHARACTER(len=80) :: namelistname 67 59 TYPE(Coordinates) :: G0,G1 68 INTEGER :: jpi,jpj,jpk,jpni,jpnj,jpnij,jpiglo,jpjglo,nlcit,nlcjt,nldit69 INTEGER :: nldjt,nleit,nlejt,nimppt,njmppt70 60 REAL*8 :: tabtemp0dreal 71 INTEGER :: tabtemp0dint72 61 CHARACTER(len=20) :: timedimname 73 62 74 63 LOGICAL, PARAMETER :: conservation = .FALSE. 75 64 ! 76 ! Variables for dimg77 !78 ! INTEGER :: ino0, it0, ipcg0, isor0, itke0,nfice,nfbulk79 ! INTEGER :: irecl8, irec,ndastp,narea,nsolv80 ! INTEGER :: jk,kt ! dummy loop indices81 ! INTEGER :: inum ! temporary logical unit82 ! INTEGER :: ios1 , ios2 ! flag for ice and bulk in the current run83 ! INTEGER :: ios3 ! flag for free surface. 0 = none 1 = yes. 0 = none 1 = yes84 ! INTEGER :: ios4 ! flag for coupled (1) or not (0)85 65 ! 86 66 narg = iargc() … … 182 162 G0%tmask = 1. 183 163 184 DO k=1,z164 DO jk=1,z 185 165 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) 187 167 WHERE( tabvar1(:,:,1,1) == 0. ) 188 G0%tmask(:,:, k) = 0.168 G0%tmask(:,:,jk) = 0. 189 169 END WHERE 190 170 DEALLOCATE(tabvar1) … … 219 199 ! 220 200 ! 221 DO ji = 1,SIZE(Ncdf_varname)201 DO ii = 1,SIZE(Ncdf_varname) 222 202 ! 223 203 ! loop on variables names 224 varname = TRIM(Ncdf_varname( ji))204 varname = TRIM(Ncdf_varname(ii)) 225 205 WRITE(*,*) 'var = ',TRIM(varname) 226 206 ! -
utils/tools/NESTING/src/agrif_create_restart_ice.f90
r10393 r10398 40 40 CHARACTER*1 :: posvar 41 41 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() 43 43 REAL*8, POINTER, DIMENSION(:,:,:,:) :: tabinterp4d,tabvar0,tabvar1,tabvar2,tabvar3 => NULL() 44 44 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() 49 46 INTEGER,DIMENSION(:),POINTER :: src_add,dst_add => NULL() 50 47 REAL*8,DIMENSION(:,:),POINTER :: matrix => NULL() … … 53 50 LOGICAL :: Interpolation,Extrapolation,Pacifique 54 51 INTEGER :: narg,iargc,ncid,x,y,z 55 INTEGER :: ji,jl,status,varid,numdims52 INTEGER :: ii,jl,status,varid,numdims 56 53 CHARACTER(len=20),DIMENSION(4) :: dimnames 57 54 CHARACTER(len=80) :: namelistname 58 55 TYPE(Coordinates) :: G0,G1 59 INTEGER :: jpl ,jpiglo,jpjglo56 INTEGER :: jpl 60 57 REAL*8 :: tabtemp0dreal 61 INTEGER :: tabtemp0dint62 58 63 59 LOGICAL, PARAMETER :: conservation = .FALSE. … … 147 143 ! 148 144 ! 149 DO ji = 1,SIZE(Ncdf_varname)145 DO ii = 1,SIZE(Ncdf_varname) 150 146 ! 151 147 ! loop on variables names 152 varname = TRIM(Ncdf_varname( ji))148 varname = TRIM(Ncdf_varname(ii)) 153 149 ! 154 150 WRITE(*,*) 'var = ',TRIM(varname) -
utils/tools/NESTING/src/agrif_create_restart_trc.f90
r10381 r10398 17 17 USE agrif_interpolation 18 18 USE agrif_partial_steps 19 USE agrif_connect_topo 19 20 ! 20 21 IMPLICIT NONE … … 40 41 CHARACTER*3 :: prefix 41 42 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() 48 45 REAL*8, POINTER, DIMENSION(:,:,:,:) :: trb,trn => NULL() 49 46 REAL*8, POINTER, DIMENSION(:,:,:,:) :: tabinterp4d,tabvar1,tabvar2,tabvar3 => NULL() 50 REAL*8, POINTER, DIMENSION(:) :: timedepth_temp => NULL()51 47 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() 56 49 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() 59 51 LOGICAL,DIMENSION(:,:),POINTER :: masksrc => NULL() 60 52 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 66 57 CHARACTER(len=20),DIMENSION(4) :: dimnames 67 58 CHARACTER(len=80) :: namelistname 68 59 TYPE(Coordinates) :: G0,G1 69 INTEGER :: jpi,jpj,jpk,jpni,jpnj,jpnij,jpiglo,jpjglo,nlcit,nlcjt,nldit70 INTEGER :: nldjt,nleit,nlejt,nimppt,njmppt71 60 REAL*8 :: tabtemp0dreal 72 INTEGER :: tabtemp0dint 73 CHARACTER(len=20) :: timedimname 74 61 62 LOGICAL, PARAMETER :: conservation = .FALSE. 75 63 ! 76 64 narg = iargc() … … 90 78 ENDIF 91 79 92 timedimname = 't'93 94 80 ! 95 81 WRITE(*,*) '' … … 100 86 ! 101 87 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) 104 90 ! 105 91 ! create this file … … 115 101 CALL Read_Ncdf_dim('x',restart_trc_file,x) 116 102 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) 118 104 119 105 IF( z .NE. N ) THEN … … 142 128 ENDIF 143 129 ! 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 144 141 CALL Init_tmask(parent_bathy_level,G0,x,y) 145 CALL Init_tmask(child bathy,G1,nxfin,nyfin)142 CALL Init_tmask(child_bathy_level,G1,nxfin,nyfin) 146 143 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 160 147 status = nf90_open(TRIM(restart_trc_file), NF90_NOWRITE, ncid) ! Open dataset 161 DO k=1,z148 DO jk = 1, z 162 149 ALLOCATE(tabvar1(x,y,1,1)) 163 150 ! 164 151 status = nf90_inq_varid(ncid, "TRNDIC", VarId) !PISCES 165 152 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) 167 154 ELSE 168 155 status = nf90_inq_varid(ncid, "TRNNO3" , VarId) ! LOBSTER 169 156 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) 171 158 ELSE 172 159 status = nf90_inq_varid(ncid, "TRNCFC11", VarId) ! CFC 173 160 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) 175 162 ELSE 176 163 status = nf90_inq_varid(ncid, "TRNCLR ", VarId) ! My TRC 177 164 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) 179 166 ELSE 180 167 WRITE(*,*) 'No suitable tracer found to build the mask ' … … 184 171 ENDIF 185 172 WHERE( tabvar1(:,:,1,1) == 0. ) 186 G0%tmask(:,:, k) = 0.173 G0%tmask(:,:,jk) = 0. 187 174 END WHERE 188 175 DEALLOCATE(tabvar1) … … 191 178 ! 192 179 ! write dimensions in output file 180 WRITE(*,*) 'write dimensions' 193 181 ! 194 182 CALL Write_Ncdf_dim('x',Child_file,nxfin) 195 183 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 : DOi = 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) 201 189 ! 202 190 ! loop on variables names 191 varname = TRIM(Ncdf_varname(ii)) 192 WRITE(*,*) 'var = ',TRIM(varname) 203 193 ! 204 SELECT CASE (TRIM(Ncdf_varname(i))) 205 ! 206 !copy nav_lon from child coordinates to output file 194 SELECT CASE (TRIM(varname)) 207 195 ! 208 196 CASE('nav_lon') 209 WRITE(*,*) 'copy nav_lon'210 197 CALL Read_Ncdf_var('nav_lon',TRIM(Childcoordinates),tabtemp2D) 211 198 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)) 214 200 DEALLOCATE(tabtemp2D) 215 201 Interpolation = .FALSE. 216 202 ! 217 !copy nav_lat from child coordinates to output file218 !219 203 CASE('nav_lat') 220 WRITE(*,*) 'copy nav_lat'221 204 CALL Read_Ncdf_var('nav_lat',TRIM(Childcoordinates),tabtemp2D) 222 205 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)) 225 207 DEALLOCATE(tabtemp2D) 226 208 Interpolation = .FALSE. 227 209 ! 228 !copy nav_lev from restart_file to output file229 !230 210 CASE('nav_lev') 231 232 WRITE(*,*) 'copy nav_lev'233 211 CALL Read_Ncdf_var('nav_lev',TRIM(restart_trc_file),nav_lev) 234 212 CALL Write_Ncdf_var('nav_lev','z',Child_file,nav_lev,'float') … … 236 214 Interpolation = .FALSE. 237 215 ! 238 !copy time from restart_file to output file239 !240 216 CASE('time_counter') 241 WRITE(*,*) 'copy time_counter'242 217 CALL Read_Ncdf_var('time_counter',TRIM(restart_trc_file),tabtemp1D) 243 218 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') 245 220 CALL Copy_Ncdf_att('time_counter',TRIM(restart_trc_file),Child_file) 246 221 DEALLOCATE(tabtemp1D) 247 222 Interpolation = .FALSE. 248 223 ! 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) 264 234 Interpolation = .FALSE. 265 235 ! 266 236 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 270 242 posvar='T' 271 243 Interpolation = .TRUE. 272 244 ! 273 245 END SELECT 246 ! 247 ! --- start interpolation --- ! 274 248 IF( Interpolation ) THEN 275 249 ! 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 279 255 280 256 ALLOCATE(detected_pts(SIZE(G0%tmask,1),SIZE(G0%tmask,2),nbvert_lev)) … … 288 264 DO n = 1,nbvert_lev 289 265 ! 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) 294 269 IF(n==1) THEN 295 270 ! … … 308 283 CALL extrap_detect(G0,G1,detected_pts(:,:,n),n) 309 284 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 313 292 SELECT CASE(TRIM(interp_type)) 314 293 CASE('bilinear') … … 324 303 END SELECT 325 304 ! 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 356 323 ALLOCATE(tabvar3d(SIZE(tabinterp4d,1),SIZE(tabinterp4d,2),SIZE(tabinterp4d,3))) 357 324 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') 360 326 DEALLOCATE(tabvar3d) 361 ELSE 362 dimnames(1)='x' 363 dimnames(2)='y' 327 ELSE 364 328 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 ! 369 334 ! 370 335 CALL Copy_Ncdf_att(TRIM(varname),TRIM(restart_trc_file),Child_file) 371 336 ! 337 ! 372 338 IF(ASSOCIATED(matrix)) DEALLOCATE(matrix,src_add,dst_add) 373 339 ! 374 IF( numdims == 3) CYCLE VARIABLE375 340 ! 376 341 END DO … … 383 348 ENDIF 384 349 350 ! change the before fields 385 351 prefix = varname(1:3) 386 352 suffix = varname(4:LEN_TRIM(varname)) … … 388 354 IF(rhot == 1 .OR. prefix/= 'TRB') THEN 389 355 WRITE(*,*) '' 390 WRITE(*,*) 'no time interpolation for ', varname356 WRITE(*,*) 'no time interpolation for ',TRIM(varname) 391 357 ELSE 392 WRITE(*,*) ''393 WRITE(*,*) 'time interpolation for', varname394 358 ALLOCATE(trn(nxfin,nyfin,z,1),trb(nxfin,nyfin,z,1)) 395 359 varname2 = 'TRN'//TRIM(suffix) … … 403 367 dimnames(1)='x' 404 368 dimnames(2)='y' 405 dimnames(3)=' z'406 dimnames(4)= TRIM(timedimname)369 dimnames(3)='nav_lev' 370 dimnames(4)='time_counter' 407 371 CALL Write_Ncdf_var(TRIM(varname),dimnames,Child_file,trb,'double') 372 DEALLOCATE(trn,trb) 408 373 ! 409 374 ENDIF 410 375 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 413 381 WRITE(*,*) ' ' 414 382 WRITE(*,*) '******* restart file successfully created *******'
Note: See TracChangeset
for help on using the changeset viewer.