Changeset 2455
- Timestamp:
- 2010-12-06T12:55:53+01:00 (14 years ago)
- Location:
- branches/nemo_v3_3_beta/NEMOGCM/TOOLS/NESTING
- Files:
-
- 8 edited
Legend:
- Unmodified
- Added
- Removed
-
branches/nemo_v3_3_beta/NEMOGCM/TOOLS/NESTING/agulhas
r2143 r2455 5 5 &coarse_grid_files 6 6 parent_coordinate_file = 'coordinates.nc' 7 parent_ bathy_level = 'bathy_level.nc'7 parent_meshmask_file = 'meshmask.nc' 8 8 / 9 9 … … 11 11 new_topo = true 12 12 elevation_database = 'bathymetry_meter_ORCA_R05.nc' 13 elevation_name = 'topo' 13 14 smoothing = true 14 15 smoothing_factor = 0.6 … … 43 44 partial_steps = true 44 45 parent_bathy_meter = 'bathy_meter.nc' 46 parent_batmet_name = 'Bathymetry' 45 47 e3zps_min = 25. 46 48 e3zps_rat = 0.2 … … 52 54 / 53 55 &forcing_files 54 U_FILES = taux_1m.nc56 U_FILES = 'taux_1m.nc' 55 57 !'dyna_grid_U.nc' ! needed for Offline 56 V_FILES = tauy_1m.nc58 V_FILES = 'tauy_1m.nc' 57 59 !'dyna_grid_V.nc' ! needed for Offline 58 60 FLX_FILES = -
branches/nemo_v3_3_beta/NEMOGCM/TOOLS/NESTING/src/agrif_create_bathy.f90
r2143 r2455 18 18 !************************************************************************ 19 19 ! * 20 ! PROGRAM CREATE_BATHY 20 ! PROGRAM CREATE_BATHY * 21 21 ! * 22 22 ! program to implement bathymetry interpolation to generate * … … 26 26 ! * 27 27 ! 1- Interpolation directly from parent bathymetry file (z-coord) * 28 ! 2- Use new topo file in meters (for example etopo) 28 ! 2- Use new topo file in meters (for example etopo) * 29 29 ! * 30 30 ! vertical coordinates permitted : z-coord and partial steps * … … 76 76 ! 77 77 CALL set_child_name(parent_coordinate_file,Child_coordinates) 78 IF( TRIM(parent_ bathy_level) .NE. '/NULL' ) &79 CALL set_child_name(parent_ bathy_level,Childlevel_file)78 IF( TRIM(parent_meshmask_file) .NE. '/NULL' ) & 79 CALL set_child_name(parent_meshmask_file,Childlevel_file) 80 80 ! 81 81 ! … … 100 100 WRITE(*,*) 'No new topo file ...' 101 101 status = Read_Coordinates(TRIM(parent_coordinate_file),G0) 102 status = Read_bathy_level(TRIM(parent_ bathy_level),G0)102 status = Read_bathy_level(TRIM(parent_meshmask_file),G0) 103 103 ! 104 104 IF( imax > SIZE(G0%glamt,1) .OR. jmax > SIZE(G0%glamt,2) .OR. & … … 587 587 G1%bathy_level=NINT(G1%bathy_level) 588 588 ! 589 IF( TRIM(parent_ bathy_level) .NE. '/NULL' ) &589 IF( TRIM(parent_meshmask_file) .NE. '/NULL' ) & 590 590 status = Write_Bathy_level(TRIM(Childlevel_file),G1) 591 591 ! … … 599 599 ! 600 600 ! 601 status = Read_bathy_level(TRIM(parent_ bathy_level),G0)601 status = Read_bathy_level(TRIM(parent_meshmask_file),G0) 602 602 ! 603 603 CALL levels_to_meter(G0) -
branches/nemo_v3_3_beta/NEMOGCM/TOOLS/NESTING/src/agrif_create_restart.f90
r2143 r2455 113 113 ! 114 114 CALL set_child_name(parent_coordinate_file,Childcoordinates) 115 CALL set_child_name(parent_ bathy_level,Childbathy)115 CALL set_child_name(parent_meshmask_file,Childbathy) 116 116 CALL set_child_name(parent_bathy_meter,Childbathymeter) 117 117 ! … … 165 165 ENDIF 166 166 ! 167 CALL Init_mask(parent_ bathy_level,G0,x,y)167 CALL Init_mask(parent_meshmask_file,G0,x,y) 168 168 CALL Init_mask(childbathy,G1,1,1) 169 169 -
branches/nemo_v3_3_beta/NEMOGCM/TOOLS/NESTING/src/agrif_create_restart_trc.f90
r2143 r2455 100 100 ! 101 101 CALL set_child_name(parent_coordinate_file,Childcoordinates) 102 CALL set_child_name(parent_ bathy_level,Childbathy)102 CALL set_child_name(parent_meshmask_file,Childbathy) 103 103 CALL set_child_name(parent_bathy_meter,Childbathymeter) 104 104 ! … … 142 142 ENDIF 143 143 ! 144 CALL Init_tmask(parent_ bathy_level,G0,x,y)144 CALL Init_tmask(parent_meshmask_file,G0,x,y) 145 145 CALL Init_tmask(childbathy,G1,nxfin,nyfin) 146 146 -
branches/nemo_v3_3_beta/NEMOGCM/TOOLS/NESTING/src/agrif_interpolation.f90
r2143 r2455 22 22 ! module containing subroutine used for : * 23 23 ! - Forcing data interpolation * 24 ! - Parent to Child coordinates interpolation 24 ! - Parent to Child coordinates interpolation * 25 25 ! * 26 26 !************************************************************************ … … 33 33 ! subroutine agrif_interp * 34 34 ! * 35 ! subroutine to interpolate coordinates 35 ! subroutine to interpolate coordinates * 36 36 ! * 37 37 ! - input : * 38 ! tabin : coarse grid coordinate variable 38 ! tabin : coarse grid coordinate variable * 39 39 ! typevar : position of interpolated variable on cells * 40 40 ! * … … 499 499 CALL set_child_name(filename,Child_file) 500 500 CALL set_child_name(parent_coordinate_file,Childcoordinates) 501 CALL set_child_name(parent_ bathy_level,childbathy)501 CALL set_child_name(parent_meshmask_file,childbathy) 502 502 WRITE(*,*) 'Child grid file name = ',TRIM(Child_file) 503 503 ! … … 541 541 ALLOCATE(mask(numlon,numlat,N)) 542 542 CALL Init_mask(childbathy,G1,1,1) 543 CALL Init_mask(parent_ bathy_level,G0,1,1)543 CALL Init_mask(parent_meshmask_file,G0,1,1) 544 544 ! 545 545 ENDIF -
branches/nemo_v3_3_beta/NEMOGCM/TOOLS/NESTING/src/agrif_readwrite.f90
r2143 r2455 19 19 ! * 20 20 ! module containing subroutine used for : * 21 ! - Coordinates files reading/writing 21 ! - Coordinates files reading/writing * 22 22 ! - Bathymetry files reading/writing (meter and levels) * 23 23 ! - Naming of child grid files * … … 139 139 CHARACTER(*) name 140 140 TYPE(Coordinates) :: Grid 141 INTEGER :: status,ncid,z 142 REAL*8,DIMENSION(:),POINTER :: tabtemp 143 INTEGER,DIMENSION(:),POINTER :: tabint 144 CHARACTER(len=20),DIMENSION(4) :: dimnames 141 INTEGER :: status,ncid 142 CHARACTER(len=1),DIMENSION(2) :: dimnames 145 143 ! 146 144 status = nf90_create(name,NF90_WRITE,ncid) 147 145 status = nf90_close(ncid) 148 146 ! 149 CALL Write_Ncdf_dim('x',name,nxfin) 150 CALL Write_Ncdf_dim('y',name,nyfin) 151 IF(.NOT. iom_activated) CALL Write_Ncdf_dim('z',name,1) 152 CALL Write_Ncdf_dim('time',name,0) 153 ! 154 dimnames(1)='x' 155 dimnames(2)='y' 156 CALL Write_Ncdf_var('nav_lon',dimnames(1:2),name,Grid%nav_lon,'float') 157 CALL Write_Ncdf_var('nav_lat',dimnames(1:2),name,Grid%nav_lat,'float') 158 ! 159 IF(.NOT. iom_activated) THEN 160 ! copy nav_lev variable -> IOIPSL 161 CALL Read_Ncdf_dim('z',parent_coordinate_file,z) 162 ALLOCATE(tabtemp(z)) 163 CALL Read_Ncdf_var('nav_lev',TRIM(parent_coordinate_file),tabtemp) 164 CALL Write_Ncdf_var('nav_lev','z',name,tabtemp,'float') 165 DEALLOCATE(tabtemp) 166 ENDIF 167 ! 168 CALL Read_Ncdf_var('time',TRIM(parent_coordinate_file),tabtemp) 169 CALL Write_Ncdf_var('time','time',name,tabtemp,'float') 170 DEALLOCATE(tabtemp) 171 CALL Read_Ncdf_var('time_steps',TRIM(parent_coordinate_file),tabint) 172 CALL Write_Ncdf_var('time_steps','time',name,tabint) 173 ! 174 dimnames(1)='x' 175 dimnames(2)='y' 176 IF(iom_activated) THEN 177 dimnames(3)='time' 178 ELSE 179 dimnames(3)='z' 180 dimnames(4)='time' 181 ENDIF 182 183 CALL Write_Ncdf_var('glamt',dimnames,name,Grid%glamt,3,'double') 184 CALL Write_Ncdf_var('glamu',dimnames,name,Grid%glamu,3,'double') 185 CALL Write_Ncdf_var('glamv',dimnames,name,Grid%glamv,3,'double') 186 CALL Write_Ncdf_var('glamf',dimnames,name,Grid%glamf,3,'double') 187 CALL Write_Ncdf_var('gphit',dimnames,name,Grid%gphit,3,'double') 188 CALL Write_Ncdf_var('gphiu',dimnames,name,Grid%gphiu,3,'double') 189 CALL Write_Ncdf_var('gphiv',dimnames,name,Grid%gphiv,3,'double') 190 CALL Write_Ncdf_var('gphif',dimnames,name,Grid%gphif,3,'double') 191 CALL Write_Ncdf_var('e1t',dimnames,name,Grid%e1t,3,'double') 192 CALL Write_Ncdf_var('e1u',dimnames,name,Grid%e1u,3,'double') 193 CALL Write_Ncdf_var('e1v',dimnames,name,Grid%e1v,3,'double') 194 CALL Write_Ncdf_var('e1f',dimnames,name,Grid%e1f,3,'double') 195 CALL Write_Ncdf_var('e2t',dimnames,name,Grid%e2t,3,'double') 196 CALL Write_Ncdf_var('e2u',dimnames,name,Grid%e2u,3,'double') 197 CALL Write_Ncdf_var('e2v',dimnames,name,Grid%e2v,3,'double') 198 CALL Write_Ncdf_var('e2f',dimnames,name,Grid%e2f,3,'double') 199 ! 200 CALL Copy_Ncdf_att('nav_lon',TRIM(parent_coordinate_file),name,& 201 MINVAL(Grid%nav_lon),MAXVAL(Grid%nav_lon)) 202 CALL Copy_Ncdf_att('nav_lat',TRIM(parent_coordinate_file),name,& 203 MINVAL(Grid%nav_lat),MAXVAL(Grid%nav_lat)) 204 CALL Copy_Ncdf_att('nav_lev',TRIM(parent_coordinate_file),name) 205 CALL Copy_Ncdf_att('time',TRIM(parent_coordinate_file),name) 206 CALL Copy_Ncdf_att('time_steps',TRIM(parent_coordinate_file),name) 147 dimnames = (/ 'x','y' /) 148 CALL Write_Ncdf_dim(dimnames(1),name,nxfin) 149 CALL Write_Ncdf_dim(dimnames(2),name,nyfin) 150 ! 151 CALL Write_Ncdf_var('nav_lon',dimnames,name,Grid%nav_lon,'float') 152 CALL Write_Ncdf_var('nav_lat',dimnames,name,Grid%nav_lat,'float') 153 ! 154 CALL Write_Ncdf_var('glamt',dimnames,name,Grid%glamt,'double') 155 CALL Write_Ncdf_var('glamu',dimnames,name,Grid%glamu,'double') 156 CALL Write_Ncdf_var('glamv',dimnames,name,Grid%glamv,'double') 157 CALL Write_Ncdf_var('glamf',dimnames,name,Grid%glamf,'double') 158 CALL Write_Ncdf_var('gphit',dimnames,name,Grid%gphit,'double') 159 CALL Write_Ncdf_var('gphiu',dimnames,name,Grid%gphiu,'double') 160 CALL Write_Ncdf_var('gphiv',dimnames,name,Grid%gphiv,'double') 161 CALL Write_Ncdf_var('gphif',dimnames,name,Grid%gphif,'double') 162 CALL Write_Ncdf_var('e1t',dimnames,name,Grid%e1t,'double') 163 CALL Write_Ncdf_var('e1u',dimnames,name,Grid%e1u,'double') 164 CALL Write_Ncdf_var('e1v',dimnames,name,Grid%e1v,'double') 165 CALL Write_Ncdf_var('e1f',dimnames,name,Grid%e1f,'double') 166 CALL Write_Ncdf_var('e2t',dimnames,name,Grid%e2t,'double') 167 CALL Write_Ncdf_var('e2u',dimnames,name,Grid%e2u,'double') 168 CALL Write_Ncdf_var('e2v',dimnames,name,Grid%e2v,'double') 169 CALL Write_Ncdf_var('e2f',dimnames,name,Grid%e2f,'double') 170 ! 171 CALL Copy_Ncdf_att('nav_lon',TRIM(parent_coordinate_file),name,MINVAL(Grid%nav_lon),MAXVAL(Grid%nav_lon)) 172 CALL Copy_Ncdf_att('nav_lat',TRIM(parent_coordinate_file),name,MINVAL(Grid%nav_lat),MAXVAL(Grid%nav_lat)) 207 173 CALL Copy_Ncdf_att('glamt',TRIM(parent_coordinate_file),name) 208 174 CALL Copy_Ncdf_att('glamu',TRIM(parent_coordinate_file),name) … … 224 190 WRITE(*,*) ' ' 225 191 WRITE(*,*) 'Writing coordinates file: ',name 226 IF(.NOT. iom_activated) WRITE(*,*) 'IOISPL format'227 IF(iom_activated) WRITE(*,*) 'IOM format'228 192 WRITE(*,*) ' ' 229 193 ! … … 245 209 TYPE(Coordinates) :: Grid 246 210 ! 247 CALL Read_Ncdf_var(' Bathy_level',name,Grid%Bathy_level)211 CALL Read_Ncdf_var('mbathy',name,Grid%Bathy_level) 248 212 ! 249 213 WRITE(*,*) ' ' … … 265 229 CHARACTER(*) name 266 230 TYPE(Coordinates) :: Grid 267 INTEGER :: status,ncid,deptht 268 REAL*8,DIMENSION(:),POINTER :: timedepth_temp 269 REAL*8,DIMENSION(:,:,:),POINTER :: bathy3d 270 REAL*8,DIMENSION(:,:,:,:),POINTER :: bathy4d 271 CHARACTER(len=20),DIMENSION(4) :: dimnames 231 INTEGER :: status,ncid 232 CHARACTER(len=1),DIMENSION(2) :: dimnames 272 233 ! 273 234 status = nf90_create(name,NF90_WRITE,ncid) 274 235 status = nf90_close(ncid) 275 236 ! 276 CALL Write_Ncdf_dim('x',name,nxfin) 277 CALL Write_Ncdf_dim('y',name,nyfin) 278 IF(.NOT. iom_activated ) CALL Write_Ncdf_dim('deptht',name,1) 279 CALL Write_Ncdf_dim('time_counter',name,0) 280 ! 281 dimnames(1)='x' 282 dimnames(2)='y' 283 IF(iom_activated ) THEN 284 dimnames(3)='time_counter' 285 ELSE 286 dimnames(3)='deptht' 287 dimnames(4)='time_counter' 288 ENDIF 289 ! 290 CALL Write_Ncdf_var('nav_lon',dimnames(1:2),name,Grid%nav_lon,'float') 291 CALL Write_Ncdf_var('nav_lat',dimnames(1:2),name,Grid%nav_lat,'float') 292 ! 293 ! deptht must be considered for IOIPSL format 294 ! 295 IF ( Dims_Existence( 'deptht' , TRIM(parent_bathy_level) ) & 296 .AND. .NOT. iom_activated) THEN 297 CALL Read_Ncdf_dim('deptht',TRIM(parent_bathy_level),deptht) 298 ALLOCATE(timedepth_temp(deptht)) 299 CALL Read_Ncdf_var('deptht',TRIM(parent_bathy_level),timedepth_temp) 300 CALL Write_Ncdf_var('deptht','deptht',name,timedepth_temp,'float') 301 CALL Copy_Ncdf_att('deptht',TRIM(parent_bathy_level),name) 302 DEALLOCATE(timedepth_temp) 303 ENDIF 304 ! 305 CALL Read_Ncdf_var('time_counter',TRIM(parent_bathy_level),timedepth_temp) 306 CALL Write_Ncdf_var('time_counter','time_counter',name,timedepth_temp,'float') 307 ! 308 IF(iom_activated) THEN 309 ALLOCATE(bathy3d(nxfin,nyfin,1)) 310 bathy3d(:,:,1) = Grid%bathy_level(:,:) 311 CALL Write_Ncdf_var('Bathy_level',dimnames(1:3),name,bathy3d,'float') 312 DEALLOCATE(bathy3d) 313 ELSE 314 ALLOCATE(bathy4d(nxfin,nyfin,1,1)) 315 bathy4d(:,:,1,1) = Grid%bathy_level(:,:) 316 CALL Write_Ncdf_var('Bathy_level',dimnames,name,bathy4d,'float') 317 DEALLOCATE(bathy4d) 318 ENDIF 319 ! 320 CALL Copy_Ncdf_att('nav_lon',TRIM(parent_bathy_level),name, & 321 MINVAL(Grid%nav_lon),MAXVAL(Grid%nav_lon)) 322 CALL Copy_Ncdf_att('nav_lat',TRIM(parent_bathy_level),name, & 323 MINVAL(Grid%nav_lat),MAXVAL(Grid%nav_lat)) 324 IF(.NOT. iom_activated ) & 325 CALL Copy_Ncdf_att('deptht',TRIM(parent_bathy_level),name) 326 CALL Copy_Ncdf_att('time_counter',TRIM(parent_bathy_level),name) 327 CALL Copy_Ncdf_att('Bathy_level',TRIM(parent_bathy_level),name) 237 dimnames = (/ 'x','y' /) 238 CALL Write_Ncdf_dim(dimnames(1),name,nxfin) 239 CALL Write_Ncdf_dim(dimnames(2),name,nyfin) 240 ! 241 CALL Write_Ncdf_var('nav_lon',dimnames,name,Grid%nav_lon ,'float') 242 CALL Write_Ncdf_var('nav_lat',dimnames,name,Grid%nav_lat ,'float') 243 CALL Write_Ncdf_var('mbathy' ,dimnames,name,Grid%bathy_level,'float') 244 ! 245 CALL Copy_Ncdf_att('nav_lon',TRIM(parent_meshmask_file),name,MINVAL(Grid%nav_lon),MAXVAL(Grid%nav_lon)) 246 CALL Copy_Ncdf_att('nav_lat',TRIM(parent_meshmask_file),name,MINVAL(Grid%nav_lat),MAXVAL(Grid%nav_lat)) 247 CALL Copy_Ncdf_att('mbathy' ,TRIM(parent_meshmask_file),name) 328 248 ! 329 249 WRITE(*,*) ' ' 330 250 WRITE(*,*) 'Writing bathymetry file: ',name 331 IF(.NOT. iom_activated) WRITE(*,*) 'IOISPL format'332 IF(iom_activated) WRITE(*,*) 'IOM format'333 251 WRITE(*,*) ' ' 334 252 ! … … 352 270 TYPE(Coordinates) :: CoarseGrid,ChildGrid 353 271 ! 354 IF( Dims_Existence('lon',name) .AND. & 355 Dims_Existence('lat',name)) THEN 272 IF( Dims_Existence('lon',name) .AND. Dims_Existence('lat',name) ) THEN 356 273 WRITE(*,*) '****' 357 274 WRITE(*,*) ' etopo format for external high resolution database ' … … 359 276 CALL Read_Ncdf_var('lon',name,topo_lon) 360 277 CALL Read_Ncdf_var('lat',name,topo_lat) 361 ELSE IF( Dims_Existence('x',name) & 362 .AND. Dims_Existence('y',name) ) THEN 278 ELSE IF( Dims_Existence('x',name) .AND. Dims_Existence('y',name) ) THEN 363 279 WRITE(*,*) '****' 364 280 WRITE(*,*) ' OPA format for external high resolution database ' … … 366 282 CALL Read_Ncdf_var('nav_lon',name,CoarseGrid%nav_lon) 367 283 CALL Read_Ncdf_var('nav_lat',name,CoarseGrid%nav_lat) 368 CALL Read_Ncdf_var( 'Bathymetry',name,CoarseGrid%Bathy_meter)284 CALL Read_Ncdf_var(parent_batmet_name,name,CoarseGrid%Bathy_meter) 369 285 ! 370 286 IF ( PRESENT(Pacifique) ) THEN … … 392 308 ! 393 309 i_min = MAXLOC(topo_lon,mask = topo_lon < MINVAL(ChildGrid%nav_lon)) 394 395 !396 310 i_max = MINLOC(topo_lon,mask = topo_lon > MAXVAL(ChildGrid%nav_lon)) 397 !398 311 j_min = MAXLOC(topo_lat,mask = topo_lat < MINVAL(ChildGrid%nav_lat)) 399 312 j_max = MINLOC(topo_lat,mask = topo_lat > MAXVAL(ChildGrid%nav_lat)) … … 402 315 ! 403 316 IF(j_min(1)-2 >= 1 .AND. j_max(1)+3 <= SIZE(topo_lat,1) ) THEN 404 tabdim2 = j_max(1)-j_min(1)+5 405 ELSE 406 tabdim2 = j_max(1)-j_min(1)+1 317 j_min(1) = j_min(1)-2 318 j_max(1) = j_max(1)+3 407 319 ENDIF 320 tabdim2 = j_max(1) - j_min(1) + 1 408 321 ! 409 322 ALLOCATE(CoarseGrid%nav_lon(tabdim1,tabdim2)) … … 411 324 ALLOCATE(CoarseGrid%Bathy_meter(tabdim1,tabdim2)) 412 325 ! 413 DO j = 1,SIZE(CoarseGrid%nav_lat,1) 414 IF( j_min(1)-2 >= 1 .AND. j_max(1)+3 <= SIZE(topo_lat,1) ) THEN 415 CoarseGrid%nav_lat(j,1:tabdim2) = topo_lat(j_min(1)-2:j_max(1)+3) 416 ELSE 417 CoarseGrid%nav_lat(j,1:tabdim2) = topo_lat(j_min(1):j_max(1)+1) 418 ENDIF 326 DO i = 1,tabdim1 327 CoarseGrid%nav_lat(i,:) = topo_lat(j_min(1):j_max(1)) 419 328 END DO 420 329 ! 421 DO i = 1,SIZE(CoarseGrid%nav_lon,2)330 DO j = 1, tabdim2 422 331 ! 423 CoarseGrid%nav_lon(1:SIZE(topo_lon)-i_min(1) ,i) = topo_lon(i_min(1):SIZE(topo_lon))424 CoarseGrid%nav_lon( 1+SIZE(topo_lon)-i_min(1):tabdim1,i) = topo_lon(1:i_max(1))332 CoarseGrid%nav_lon(1:SIZE(topo_lon)-i_min(1)+1 ,j) = topo_lon(i_min(1):SIZE(topo_lon)) 333 CoarseGrid%nav_lon(2+SIZE(topo_lon)-i_min(1):tabdim1,j) = topo_lon(1:i_max(1)) 425 334 ! 426 335 END DO 427 336 status = nf90_open(name,NF90_NOWRITE,ncid) 428 status = nf90_inq_varid(ncid, 'topo',varid)337 status = nf90_inq_varid(ncid,elevation_name,varid) 429 338 ! 430 status=nf90_get_var(ncid,varid,CoarseGrid%Bathy_meter(1:SIZE(topo_lon)-i_min(1) ,:), &431 start=(/i_min(1),j_min(1) -2/),count=(/SIZE(topo_lon)-i_min(1),tabdim2/))432 433 status=nf90_get_var(ncid,varid,CoarseGrid%Bathy_meter( 1+SIZE(topo_lon)-i_min(1):tabdim1,:), &434 start=(/1,j_min(1) -2/),count=(/i_max(1)+1,tabdim2/))339 status=nf90_get_var(ncid,varid,CoarseGrid%Bathy_meter(1:SIZE(topo_lon)-i_min(1)+1,:), & 340 start=(/i_min(1),j_min(1)/),count=(/SIZE(topo_lon)-i_min(1),tabdim2/)) 341 342 status=nf90_get_var(ncid,varid,CoarseGrid%Bathy_meter(2+SIZE(topo_lon)-i_min(1):tabdim1,:), & 343 start=(/1,j_min(1)/),count=(/i_max(1),tabdim2/)) 435 344 ! 436 345 ELSE … … 442 351 ! 443 352 IF(i_min(1)-2 >= 1 .AND. i_max(1)+3 <= SIZE(topo_lon,1) ) THEN 444 tabdim1 = i_max(1)-i_min(1)+5 445 ELSE 446 tabdim1 = i_max(1)-i_min(1)+1 353 i_min(1) = i_min(1)-2 354 i_max(1) = i_max(1)+3 447 355 ENDIF 356 tabdim1 = i_max(1) - i_min(1) + 1 448 357 ! 449 358 IF(j_min(1)-2 >= 1 .AND. j_max(1)+3 <= SIZE(topo_lat,1) ) THEN 450 tabdim2 = j_max(1)-j_min(1)+5 451 ELSE 452 tabdim2 = j_max(1)-j_min(1)+1 359 j_min(1) = j_min(1)-2 360 j_max(1) = j_max(1)+3 453 361 ENDIF 362 tabdim2 = j_max(1) - j_min(1) + 1 454 363 ! 455 364 WRITE(*,*) ' ' … … 461 370 ALLOCATE(CoarseGrid%Bathy_meter(tabdim1,tabdim2)) 462 371 ! 463 DO i = 1,SIZE(CoarseGrid%nav_lon,2) 464 IF(i_min(1)-2 >= 1 .AND. i_max(1)+3 <= SIZE(topo_lon,1) ) THEN 465 CoarseGrid%nav_lon(1:tabdim1,i) = topo_lon(i_min(1)-2:i_max(1)+3) 466 ELSE 467 CoarseGrid%nav_lon(1:tabdim1,i) = topo_lon(i_min(1):i_max(1)+1) 468 ENDIF 469 ! 372 DO j = 1,tabdim2 373 CoarseGrid%nav_lon(:,j) = topo_lon(i_min(1):i_max(1)) 470 374 END DO 471 375 ! 472 DO j = 1,SIZE(CoarseGrid%nav_lat,1) 473 IF( j_min(1)-2 >= 1 .AND. j_max(1)+3 <= SIZE(topo_lat,1) ) THEN 474 CoarseGrid%nav_lat(j,1:tabdim2) = topo_lat(j_min(1)-2:j_max(1)+3) 475 ELSE 476 CoarseGrid%nav_lat(j,1:tabdim2) = topo_lat(j_min(1):j_max(1)+1) 477 ENDIF 376 DO i = 1,tabdim1 377 CoarseGrid%nav_lat(i,:) = topo_lat(j_min(1):j_max(1)) 478 378 END DO 479 379 ! 480 !481 380 status = nf90_open(name,NF90_NOWRITE,ncid) 482 status = nf90_inq_varid(ncid,'topo',varid) 483 IF( j_min(1)-2 >= 1 .AND. i_min(1)-2 >= 1 ) THEN 484 status=nf90_get_var(ncid,varid,CoarseGrid%Bathy_meter, & 485 start=(/i_min(1)-2,j_min(1)-2/),count=(/tabdim1,tabdim2/)) 486 ELSE 487 status=nf90_get_var(ncid,varid,CoarseGrid%Bathy_meter, & 488 start=(/i_min(1),j_min(1)/),count=(/tabdim1,tabdim2/)) 489 ENDIF 381 status = nf90_inq_varid(ncid,elevation_name,varid) 382 status = nf90_get_var(ncid,varid,CoarseGrid%Bathy_meter, & 383 & start=(/i_min(1),j_min(1)/),count=(/tabdim1,tabdim2/)) 490 384 ! 491 385 ENDIF 492 !493 386 ! 494 387 status = nf90_close(ncid) … … 498 391 END WHERE 499 392 ! 500 DO j = 1,SIZE(CoarseGrid%Bathy_meter,2) 501 DO i = 1,SIZE(CoarseGrid%Bathy_meter,1) 502 503 CoarseGrid%Bathy_meter(i,j) = -1.0*CoarseGrid%Bathy_meter(i,j) 504 505 END DO 506 END DO 393 CoarseGrid%Bathy_meter(:,:) = -1.0 * CoarseGrid%Bathy_meter(:,:) 507 394 ! 508 395 Read_Bathy_meter = 1 … … 524 411 TYPE(Coordinates) :: Grid 525 412 ! 526 CALL Read_Ncdf_var( 'Bathymetry',name,Grid%Bathy_meter)413 CALL Read_Ncdf_var(parent_batmet_name,name,Grid%Bathy_meter) 527 414 ! 528 415 WRITE(*,*) ' ' … … 544 431 CHARACTER(*) name 545 432 TYPE(Coordinates) :: Grid 546 INTEGER :: status,ncid,deptht 547 REAL*8,DIMENSION(:),POINTER :: timedepth_temp 548 REAL*8,DIMENSION(:,:,:),POINTER :: bathy3d 549 CHARACTER(len=20),DIMENSION(4) :: dimnames 550 REAL*8,DIMENSION(:,:,:,:),POINTER :: bathy4d 433 INTEGER :: status,ncid 434 CHARACTER(len=1),DIMENSION(2) :: dimnames 551 435 INTEGER :: nx,ny 552 436 ! … … 556 440 nx = SIZE(Grid%bathy_meter,1) 557 441 ny = SIZE(Grid%bathy_meter,2) 558 559 CALL Write_Ncdf_dim('x',name,nx) 560 CALL Write_Ncdf_dim('y',name,ny) 561 IF(.NOT. iom_activated) CALL Write_Ncdf_dim('deptht',name,1) 562 IF(Dims_Existence('time_counter' , TRIM(parent_bathy_meter))) & 563 CALL Write_Ncdf_dim('time_counter',name,0) 564 ! 565 dimnames(1)='x' 566 dimnames(2)='y' 567 IF( iom_activated ) THEN 568 dimnames(3)='time_counter' 569 ELSE 570 dimnames(3)='deptht' 571 dimnames(4)='time_counter' 572 ENDIF 442 dimnames = (/ 'x','y' /) 443 444 CALL Write_Ncdf_dim(dimnames(1),name,nx) 445 CALL Write_Ncdf_dim(dimnames(2),name,ny) 573 446 ! 574 CALL Write_Ncdf_var('nav_lon',dimnames(1:2),name,Grid%nav_lon,'float') 575 CALL Write_Ncdf_var('nav_lat',dimnames(1:2),name,Grid%nav_lat,'float') 576 ! 577 IF ( Dims_Existence( 'deptht' , TRIM(parent_bathy_meter) ) & 578 .AND. .NOT. iom_activated ) THEN 579 CALL Read_Ncdf_dim('deptht',TRIM(parent_bathy_level),deptht) 580 ALLOCATE(timedepth_temp(deptht)) 581 CALL Read_Ncdf_var('deptht',TRIM(parent_bathy_meter),timedepth_temp) 582 CALL Write_Ncdf_var('deptht','deptht',name,timedepth_temp,'float') 583 CALL Copy_Ncdf_att('deptht',TRIM(parent_bathy_meter),name) 584 DEALLOCATE(timedepth_temp) 585 ENDIF 586 ! 587 IF ( Dims_Existence( 'time_counter' , TRIM(parent_bathy_meter) ) ) THEN 588 CALL Read_Ncdf_var('time_counter',TRIM(parent_bathy_meter),timedepth_temp) 589 CALL Write_Ncdf_var('time_counter','time_counter',name,timedepth_temp,'float') 590 CALL Copy_Ncdf_att('time_counter',TRIM(parent_bathy_meter),name) 591 DEALLOCATE(timedepth_temp) 592 ENDIF 593 ! 594 IF(iom_activated) THEN 595 ALLOCATE(bathy3d(nx,ny,1)) 596 bathy3d(:,:,1) = Grid%bathy_meter(:,:) 597 CALL Write_Ncdf_var('Bathymetry',dimnames(1:3),name,bathy3d,'float') 598 DEALLOCATE(bathy3d) 599 ELSE IF( .NOT. Dims_Existence( 'time_counter' , TRIM(parent_bathy_meter) ) .AND. & 600 .NOT. Dims_Existence( 'deptht' , TRIM(parent_bathy_meter) ) ) THEN 601 CALL Write_Ncdf_var('Bathymetry',dimnames(1:2),name,Grid%bathy_meter,'float') 602 ELSE 603 ALLOCATE(bathy4d(nx,ny,1,1)) 604 bathy4d(:,:,1,1) = Grid%bathy_meter(:,:) 605 CALL Write_Ncdf_var('Bathymetry',dimnames,name,bathy4d,'float') 606 DEALLOCATE(bathy4d) 607 ENDIF 608 ! 609 CALL Copy_Ncdf_att('nav_lon',TRIM(parent_bathy_meter),name, & 610 MINVAL(Grid%nav_lon),MAXVAL(Grid%nav_lon)) 611 CALL Copy_Ncdf_att('nav_lat',TRIM(parent_bathy_meter),name, & 612 MINVAL(Grid%nav_lat),MAXVAL(Grid%nav_lat)) 613 ! 614 ! 615 CALL Copy_Ncdf_att('Bathymetry',TRIM(parent_bathy_meter),name) 447 CALL Write_Ncdf_var('nav_lon' ,dimnames,name,Grid%nav_lon ,'float') 448 CALL Write_Ncdf_var('nav_lat' ,dimnames,name,Grid%nav_lat ,'float') 449 CALL Write_Ncdf_var(parent_batmet_name,dimnames,name,Grid%bathy_meter,'float') 450 ! 451 CALL Copy_Ncdf_att('nav_lon' ,TRIM(parent_bathy_meter),name,MINVAL(Grid%nav_lon),MAXVAL(Grid%nav_lon)) 452 CALL Copy_Ncdf_att('nav_lat' ,TRIM(parent_bathy_meter),name,MINVAL(Grid%nav_lat),MAXVAL(Grid%nav_lat)) 453 CALL Copy_Ncdf_att(parent_batmet_name,TRIM(parent_bathy_meter),name) 616 454 ! 617 455 WRITE(*,*) ' ' 618 456 WRITE(*,*) 'Writing bathymetry file: ',name 619 IF(.NOT. iom_activated) WRITE(*,*) 'IOISPL format'620 IF(iom_activated) WRITE(*,*) 'IOM format'621 457 WRITE(*,*) ' ' 622 458 ! … … 689 525 k=0 690 526 conservation = .FALSE. 691 DO WHILE( k < =SIZE(flxtab) .AND. .NOT.find )527 DO WHILE( k < SIZE(flxtab) .AND. .NOT.find ) 692 528 k = k+1 693 529 IF( TRIM(varname) .EQ. TRIM(flxtab(k)) ) THEN -
branches/nemo_v3_3_beta/NEMOGCM/TOOLS/NESTING/src/agrif_types.f90
r2143 r2455 57 57 LOGICAL new_topo,removeclosedseas,dimg,iom_activated 58 58 ! 59 CHARACTER*100 parent_bathy_level,elevation_database,parent_bathy_meter 59 CHARACTER*100 parent_meshmask_file,elevation_database,parent_bathy_meter 60 CHARACTER*100 elevation_name,parent_batmet_name 60 61 CHARACTER*100 parent_coordinate_file,restart_file,updated_parent_file,restart_trc_file 61 62 CHARACTER*100 dimg_output_file,interp_type … … 66 67 NAMELIST /input_output/iom_activated 67 68 ! 68 NAMELIST /coarse_grid_files/parent_coordinate_file,parent_ bathy_level69 ! 70 NAMELIST /bathymetry/new_topo,elevation_database, smoothing,smoothing_factor, &69 NAMELIST /coarse_grid_files/parent_coordinate_file,parent_meshmask_file 70 ! 71 NAMELIST /bathymetry/new_topo,elevation_database,elevation_name,smoothing,smoothing_factor, & 71 72 nb_connection_pts,removeclosedseas,type_bathy_interp 72 73 ! … … 75 76 NAMELIST /vertical_grid/ppkth,ppacr,ppdzmin,pphmax,psur,pa0,pa1,N 76 77 ! 77 NAMELIST /partial_cells/partial_steps,parent_bathy_meter, e3zps_min,e3zps_rat78 NAMELIST /partial_cells/partial_steps,parent_bathy_meter,parent_batmet_name,e3zps_min,e3zps_rat 78 79 ! 79 80 NAMELIST /nemo_coarse_grid/ jpizoom,jpjzoom
Note: See TracChangeset
for help on using the changeset viewer.