- Timestamp:
- Feb 18, 2021 9:47:49 AM (4 years ago)
- Location:
- palm/trunk/SOURCE
- Files:
-
- 2 edited
Legend:
- Unmodified
- Added
- Removed
-
palm/trunk/SOURCE/init_3d_model.f90
r4877 r4878 24 24 ! ----------------- 25 25 ! $Id$ 26 ! Rename resize_array into add_ghost_layers and remove number of passed indices 27 ! 28 ! 4877 2021-02-17 16:17:35Z suehring 26 29 ! Bugfix in initialization of vertical surfaces with roughness and surface heat fluxes 27 30 ! … … 198 201 199 202 USE netcdf_data_input_mod, & 200 ONLY: char_fill, & 203 ONLY: add_ghost_layers, & 204 char_fill, & 201 205 check_existence, & 202 206 close_input_file, & … … 213 217 pids_id, & 214 218 real_2d, & 215 resize_array, &216 219 vars_pids 217 220 … … 1515 1518 !-- Read variable 1516 1519 CALL get_variable( pids_id, 'z0', tmp_2d%var, nxl, nxr, nys, nyn ) 1517 CALL resize_array( tmp_2d%var, nys, nyn, nxl, nxr )1520 CALL add_ghost_layers( tmp_2d%var ) 1518 1521 CALL exchange_horiz_2d( tmp_2d%var ) 1519 1522 ! … … 1543 1546 !-- Read variable 1544 1547 CALL get_variable( pids_id, 'shf', tmp_2d%var, nxl, nxr, nys, nyn ) 1545 CALL resize_array( tmp_2d%var, nys, nyn, nxl, nxr )1548 CALL add_ghost_layers( tmp_2d%var ) 1546 1549 CALL exchange_horiz_2d( tmp_2d%var ) 1547 1550 ! … … 1572 1575 !-- Read variable 1573 1576 CALL get_variable( pids_id, 'qsws', tmp_2d%var, nxl, nxr, nys, nyn ) 1574 CALL resize_array( tmp_2d%var, nys, nyn, nxl, nxr )1577 CALL add_ghost_layers( tmp_2d%var ) 1575 1578 CALL exchange_horiz_2d( tmp_2d%var ) 1576 1579 ! … … 1603 1606 !-- Read variable 1604 1607 CALL get_variable( pids_id, 'ssws', tmp_2d%var, nxl, nxr, nys, nyn ) 1605 CALL resize_array( tmp_2d%var, nys, nyn, nxl, nxr )1608 CALL add_ghost_layers( tmp_2d%var ) 1606 1609 CALL exchange_horiz_2d( tmp_2d%var ) 1607 1610 ! -
palm/trunk/SOURCE/netcdf_data_input_mod.f90
r4877 r4878 24 24 ! ----------------- 25 25 ! $Id$ 26 ! Rename resize_array into add_ghost_layers; remove number of passed indices; replace subroutine 27 ! calls with interface name 28 ! 29 ! 4877 2021-02-17 16:17:35Z suehring 26 30 ! Add interface for resize_array and add subroutine to resize 2d-real arrays 27 31 ! … … 242 246 243 247 USE indices, & 244 ONLY: nbgp 248 ONLY: nbgp, & 249 nxl, & 250 nxr, & 251 nys, & 252 nyn 245 253 246 254 USE kinds … … 790 798 END INTERFACE get_attribute 791 799 792 INTERFACE resize_array793 MODULE PROCEDURE resize_array_2d_int8794 MODULE PROCEDURE resize_array_2d_int32795 MODULE PROCEDURE resize_array_2d_real796 MODULE PROCEDURE resize_array_3d_int8797 MODULE PROCEDURE resize_array_3d_real798 MODULE PROCEDURE resize_array_4d_real799 END INTERFACE resize_array800 INTERFACE add_ghost_layers 801 MODULE PROCEDURE add_ghost_layers_2d_int8 802 MODULE PROCEDURE add_ghost_layers_2d_int32 803 MODULE PROCEDURE add_ghost_layers_2d_real 804 MODULE PROCEDURE add_ghost_layers_3d_int8 805 MODULE PROCEDURE add_ghost_layers_3d_real 806 MODULE PROCEDURE add_ghost_layers_4d_real 807 END INTERFACE add_ghost_layers 800 808 801 809 ! … … 862 870 ! 863 871 !-- Public subroutines 864 PUBLIC check_existence, & 872 PUBLIC add_ghost_layers, & 873 check_existence, & 865 874 close_input_file, & 866 875 get_attribute, & … … 879 888 netcdf_data_input_surface_data, & 880 889 netcdf_data_input_topo, & 881 open_read_file, & 882 resize_array 890 open_read_file 883 891 884 892 … … 1913 1921 !-- Exchange ghost points for surface variables. Therefore, resize variables. 1914 1922 IF ( albedo_type_f%from_file ) THEN 1915 CALL resize_array_2d_int8( albedo_type_f%var, nys, nyn, nxl, nxr )1923 CALL add_ghost_layers( albedo_type_f%var ) 1916 1924 CALL exchange_horiz_2d_byte( albedo_type_f%var, nys, nyn, nxl, nxr, nbgp ) 1917 1925 ENDIF 1918 1926 IF ( pavement_type_f%from_file ) THEN 1919 CALL resize_array_2d_int8( pavement_type_f%var, nys, nyn, nxl, nxr )1927 CALL add_ghost_layers( pavement_type_f%var ) 1920 1928 CALL exchange_horiz_2d_byte( pavement_type_f%var, nys, nyn, nxl, nxr, nbgp ) 1921 1929 ENDIF 1922 1930 IF ( soil_type_f%from_file .AND. ALLOCATED( soil_type_f%var_2d ) ) THEN 1923 CALL resize_array_2d_int8( soil_type_f%var_2d, nys, nyn, nxl, nxr)1931 CALL add_ghost_layers( soil_type_f%var_2d ) 1924 1932 CALL exchange_horiz_2d_byte( soil_type_f%var_2d, nys, nyn, nxl, nxr, nbgp ) 1925 1933 ENDIF 1926 1934 IF ( vegetation_type_f%from_file ) THEN 1927 CALL resize_array_2d_int8( vegetation_type_f%var, nys, nyn, nxl, nxr )1935 CALL add_ghost_layers( vegetation_type_f%var ) 1928 1936 CALL exchange_horiz_2d_byte( vegetation_type_f%var, nys, nyn, nxl, nxr, nbgp ) 1929 1937 ENDIF 1930 1938 IF ( water_type_f%from_file ) THEN 1931 CALL resize_array_2d_int8( water_type_f%var, nys, nyn, nxl, nxr )1939 CALL add_ghost_layers( water_type_f%var ) 1932 1940 CALL exchange_horiz_2d_byte( water_type_f%var, nys, nyn, nxl, nxr, nbgp ) 1933 1941 ENDIF … … 1938 1946 !-- introduced just for 2 variables. 1939 1947 IF ( soil_type_f%from_file .AND. ALLOCATED( soil_type_f%var_3d ) ) THEN 1940 CALL resize_array_3d_int8( soil_type_f%var_3d, 0, nz_soil, nys, nyn, nxl, nxr)1948 CALL add_ghost_layers( soil_type_f%var_3d, 0, nz_soil ) 1941 1949 DO k = 0, nz_soil 1942 1950 CALL exchange_horiz_2d_byte( soil_type_f%var_3d(k,:,:), nys, nyn, nxl, nxr, nbgp ) … … 1945 1953 1946 1954 IF ( surface_fraction_f%from_file ) THEN 1947 CALL resize_array_3d_real( surface_fraction_f%frac, 0, surface_fraction_f%nf-1, nys, nyn, & 1948 nxl, nxr ) 1955 CALL add_ghost_layers( surface_fraction_f%frac, 0, surface_fraction_f%nf-1 ) 1949 1956 DO k = 0, surface_fraction_f%nf-1 1950 1957 CALL exchange_horiz_2d( surface_fraction_f%frac(k,:,:) ) … … 1953 1960 1954 1961 IF ( building_pars_f%from_file ) THEN 1955 CALL resize_array_3d_real( building_pars_f%pars_xy, 0, building_pars_f%np-1, nys, nyn, nxl, & 1956 nxr ) 1962 CALL add_ghost_layers( building_pars_f%pars_xy, 0, building_pars_f%np-1 ) 1957 1963 DO k = 0, building_pars_f%np-1 1958 1964 CALL exchange_horiz_2d( building_pars_f%pars_xy(k,:,:) ) … … 1961 1967 1962 1968 IF ( albedo_pars_f%from_file ) THEN 1963 CALL resize_array_3d_real( albedo_pars_f%pars_xy, 0, albedo_pars_f%np-1, nys, nyn, nxl, nxr)1969 CALL add_ghost_layers( albedo_pars_f%pars_xy, 0, albedo_pars_f%np-1 ) 1964 1970 DO k = 0, albedo_pars_f%np-1 1965 1971 CALL exchange_horiz_2d( albedo_pars_f%pars_xy(k,:,:) ) … … 1968 1974 1969 1975 IF ( pavement_pars_f%from_file ) THEN 1970 CALL resize_array_3d_real( pavement_pars_f%pars_xy, 0, pavement_pars_f%np-1, nys, nyn, nxl, & 1971 nxr ) 1976 CALL add_ghost_layers( pavement_pars_f%pars_xy, 0, pavement_pars_f%np-1 ) 1972 1977 DO k = 0, pavement_pars_f%np-1 1973 1978 CALL exchange_horiz_2d( pavement_pars_f%pars_xy(k,:,:) ) … … 1976 1981 1977 1982 IF ( vegetation_pars_f%from_file ) THEN 1978 CALL resize_array_3d_real( vegetation_pars_f%pars_xy, 0, vegetation_pars_f%np-1, nys, nyn, & 1979 nxl, nxr ) 1983 CALL add_ghost_layers( vegetation_pars_f%pars_xy, 0, vegetation_pars_f%np-1 ) 1980 1984 DO k = 0, vegetation_pars_f%np-1 1981 1985 CALL exchange_horiz_2d( vegetation_pars_f%pars_xy(k,:,:) ) … … 1984 1988 1985 1989 IF ( water_pars_f%from_file ) THEN 1986 CALL resize_array_3d_real( water_pars_f%pars_xy, 0, water_pars_f%np-1, nys, nyn, nxl, nxr)1990 CALL add_ghost_layers( water_pars_f%pars_xy, 0, water_pars_f%np-1 ) 1987 1991 DO k = 0, water_pars_f%np-1 1988 1992 CALL exchange_horiz_2d( water_pars_f%pars_xy(k,:,:) ) … … 1991 1995 1992 1996 IF ( root_area_density_lsm_f%from_file ) THEN 1993 CALL resize_array_3d_real( root_area_density_lsm_f%var, 0, root_area_density_lsm_f%nz-1, & 1994 nys, nyn, nxl, nxr ) 1997 CALL add_ghost_layers( root_area_density_lsm_f%var, 0, root_area_density_lsm_f%nz-1 ) 1995 1998 DO k = 0, root_area_density_lsm_f%nz-1 1996 1999 CALL exchange_horiz_2d( root_area_density_lsm_f%var(k,:,:) ) … … 2000 2003 IF ( soil_pars_f%from_file ) THEN 2001 2004 IF ( soil_pars_f%lod == 1 ) THEN 2002 CALL resize_array_3d_real( soil_pars_f%pars_xy, 0, soil_pars_f%np-1, nys, nyn, nxl, nxr)2005 CALL add_ghost_layers( soil_pars_f%pars_xy, 0, soil_pars_f%np-1 ) 2003 2006 DO k = 0, soil_pars_f%np-1 2004 2007 CALL exchange_horiz_2d( soil_pars_f%pars_xy(k,:,:) ) … … 2006 2009 2007 2010 ELSEIF ( soil_pars_f%lod == 2 ) THEN 2008 CALL resize_array_4d_real( soil_pars_f%pars_xyz, 0, soil_pars_f%np-1, & 2009 0, soil_pars_f%nz-1, nys, nyn, nxl, nxr ) 2011 CALL add_ghost_layers( soil_pars_f%pars_xyz, 0, soil_pars_f%np-1, 0, soil_pars_f%nz-1 ) 2010 2012 2011 2013 DO k2 = 0, soil_pars_f%nz-1 … … 2018 2020 2019 2021 IF ( pavement_subsurface_pars_f%from_file ) THEN 2020 CALL resize_array_4d_real( pavement_subsurface_pars_f%pars_xyz,&2021 0, pavement_subsurface_pars_f%np-1,&2022 0, pavement_subsurface_pars_f%nz-1, nys, nyn, nxl, nxr)2022 CALL add_ghost_layers( pavement_subsurface_pars_f%pars_xyz, & 2023 0, pavement_subsurface_pars_f%np-1, & 2024 0, pavement_subsurface_pars_f%nz-1 ) 2023 2025 2024 2026 DO k2 = 0, pavement_subsurface_pars_f%nz-1 … … 2407 2409 !-- In case of non-cyclic boundary conditions set Neumann conditions at the lateral boundaries. 2408 2410 IF ( building_id_f%from_file ) THEN 2409 CALL resize_array_2d_int32( building_id_f%var, nys, nyn, nxl, nxr )2411 CALL add_ghost_layers( building_id_f%var ) 2410 2412 CALL exchange_horiz_2d_int( building_id_f%var, nys, nyn, nxl, nxr, nbgp ) 2411 2413 ENDIF 2412 2414 2413 2415 IF ( building_type_f%from_file ) THEN 2414 CALL resize_array_2d_int8( building_type_f%var, nys, nyn, nxl, nxr )2416 CALL add_ghost_layers( building_type_f%var ) 2415 2417 CALL exchange_horiz_2d_byte( building_type_f%var, nys, nyn, nxl, nxr, nbgp ) 2416 2418 ENDIF … … 3381 3383 !> Resize 8-bit 2D Integer array: (nys:nyn,nxl:nxr) -> (nysg:nyng,nxlg:nxrg) 3382 3384 !--------------------------------------------------------------------------------------------------! 3383 SUBROUTINE resize_array_2d_int8( var, js, je, is, ie)3385 SUBROUTINE add_ghost_layers_2d_int8( var ) 3384 3386 3385 3387 IMPLICIT NONE 3386 3387 INTEGER(iwp) :: ie !< upper index bound along x direction3388 INTEGER(iwp) :: is !< lower index bound along x direction3389 INTEGER(iwp) :: je !< upper index bound along y direction3390 INTEGER(iwp) :: js !< lower index bound along y direction3391 3388 3392 3389 INTEGER(KIND=1), DIMENSION(:,:), ALLOCATABLE :: var !< treated variable … … 3394 3391 ! 3395 3392 !-- Allocate temporary variable 3396 ALLOCATE( var_tmp( js-nbgp:je+nbgp,is-nbgp:ie+nbgp) )3393 ALLOCATE( var_tmp(nys-nbgp:nyn+nbgp,nxl-nbgp:nxr+nbgp) ) 3397 3394 ! 3398 3395 !-- Temporary copy of the variable 3399 var_tmp( js:je,is:ie) = var(js:je,is:ie)3396 var_tmp(nys:nyn,nxl:nxr) = var(nys:nyn,nxl:nxr) 3400 3397 ! 3401 3398 !-- Resize the array 3402 3399 DEALLOCATE( var ) 3403 ALLOCATE( var( js-nbgp:je+nbgp,is-nbgp:ie+nbgp) )3400 ALLOCATE( var(nys-nbgp:nyn+nbgp,nxl-nbgp:nxr+nbgp) ) 3404 3401 ! 3405 3402 !-- Transfer temporary copy back to original array 3406 var( js:je,is:ie) = var_tmp(js:je,is:ie)3407 3408 END SUBROUTINE resize_array_2d_int83403 var(nys:nyn,nxl:nxr) = var_tmp(nys:nyn,nxl:nxr) 3404 3405 END SUBROUTINE add_ghost_layers_2d_int8 3409 3406 3410 3407 … … 3414 3411 !> Resize 32-bit 2D Integer array: (nys:nyn,nxl:nxr) -> (nysg:nyng,nxlg:nxrg) 3415 3412 !--------------------------------------------------------------------------------------------------! 3416 SUBROUTINE resize_array_2d_int32( var, js, je, is, ie)3413 SUBROUTINE add_ghost_layers_2d_int32( var ) 3417 3414 3418 3415 IMPLICIT NONE 3419 3420 INTEGER(iwp) :: ie !< upper index bound along x direction3421 INTEGER(iwp) :: is !< lower index bound along x direction3422 INTEGER(iwp) :: je !< upper index bound along y direction3423 INTEGER(iwp) :: js !< lower index bound along y direction3424 3416 3425 3417 INTEGER(iwp), DIMENSION(:,:), ALLOCATABLE :: var !< treated variable … … 3427 3419 ! 3428 3420 !-- Allocate temporary variable 3429 ALLOCATE( var_tmp( js-nbgp:je+nbgp,is-nbgp:ie+nbgp) )3421 ALLOCATE( var_tmp(nys-nbgp:nyn+nbgp,nxl-nbgp:nxr+nbgp) ) 3430 3422 ! 3431 3423 !-- Temporary copy of the variable 3432 var_tmp( js:je,is:ie) = var(js:je,is:ie)3424 var_tmp(nys:nyn,nxl:nxr) = var(nys:nyn,nxl:nxr) 3433 3425 ! 3434 3426 !-- Resize the array 3435 3427 DEALLOCATE( var ) 3436 ALLOCATE( var( js-nbgp:je+nbgp,is-nbgp:ie+nbgp) )3428 ALLOCATE( var(nys-nbgp:nyn+nbgp,nxl-nbgp:nxr+nbgp) ) 3437 3429 ! 3438 3430 !-- Transfer temporary copy back to original array 3439 var( js:je,is:ie) = var_tmp(js:je,is:ie)3440 3441 END SUBROUTINE resize_array_2d_int323431 var(nys:nyn,nxl:nxr) = var_tmp(nys:nyn,nxl:nxr) 3432 3433 END SUBROUTINE add_ghost_layers_2d_int32 3442 3434 3443 3435 !--------------------------------------------------------------------------------------------------! … … 3446 3438 !> Resize 2D float array: (nys:nyn,nxl:nxr) -> (nysg:nyng,nxlg:nxrg) 3447 3439 !--------------------------------------------------------------------------------------------------! 3448 SUBROUTINE resize_array_2d_real( var, js, je, is, ie)3440 SUBROUTINE add_ghost_layers_2d_real( var ) 3449 3441 3450 3442 IMPLICIT NONE 3451 3452 INTEGER(iwp) :: ie !< upper index bound along x direction3453 INTEGER(iwp) :: is !< lower index bound along x direction3454 INTEGER(iwp) :: je !< upper index bound along y direction3455 INTEGER(iwp) :: js !< lower index bound along y direction3456 3443 3457 3444 REAL(wp), DIMENSION(:,:), ALLOCATABLE :: var !< treated variable … … 3459 3446 ! 3460 3447 !-- Allocate temporary variable 3461 ALLOCATE( var_tmp( js-nbgp:je+nbgp,is-nbgp:ie+nbgp) )3448 ALLOCATE( var_tmp(nys-nbgp:nyn+nbgp,nxl-nbgp:nxr+nbgp) ) 3462 3449 ! 3463 3450 !-- Temporary copy of the variable 3464 var_tmp( js:je,is:ie) = var(js:je,is:ie)3451 var_tmp(nys:nyn,nxl:nxr) = var(nys:nyn,nxl:nxr) 3465 3452 ! 3466 3453 !-- Resize the array 3467 3454 DEALLOCATE( var ) 3468 ALLOCATE( var( js-nbgp:je+nbgp,is-nbgp:ie+nbgp) )3455 ALLOCATE( var(nys-nbgp:nyn+nbgp,nxl-nbgp:nxr+nbgp) ) 3469 3456 ! 3470 3457 !-- Transfer temporary copy back to original array 3471 var( js:je,is:ie) = var_tmp(js:je,is:ie)3472 3473 END SUBROUTINE resize_array_2d_real3458 var(nys:nyn,nxl:nxr) = var_tmp(nys:nyn,nxl:nxr) 3459 3460 END SUBROUTINE add_ghost_layers_2d_real 3474 3461 3475 3462 … … 3479 3466 !> Resize 8-bit 3D Integer array: (:,nys:nyn,nxl:nxr) -> (:,nysg:nyng,nxlg:nxrg) 3480 3467 !--------------------------------------------------------------------------------------------------! 3481 SUBROUTINE resize_array_3d_int8( var, ks, ke, js, je, is, ie )3468 SUBROUTINE add_ghost_layers_3d_int8( var, ks, ke ) 3482 3469 3483 3470 IMPLICIT NONE 3484 3471 3485 INTEGER(iwp) :: ie !< upper index bound along x direction3486 INTEGER(iwp) :: is !< lower index bound along x direction3487 INTEGER(iwp) :: je !< upper index bound along y direction3488 INTEGER(iwp) :: js !< lower index bound along y direction3489 3472 INTEGER(iwp) :: ke !< upper bound of treated array in z-direction 3490 3473 INTEGER(iwp) :: ks !< lower bound of treated array in z-direction … … 3494 3477 ! 3495 3478 !-- Allocate temporary variable 3496 ALLOCATE( var_tmp(ks:ke, js-nbgp:je+nbgp,is-nbgp:ie+nbgp) )3479 ALLOCATE( var_tmp(ks:ke,nys-nbgp:nyn+nbgp,nxl-nbgp:nxr+nbgp) ) 3497 3480 ! 3498 3481 !-- Temporary copy of the variable 3499 var_tmp(ks:ke, js:je,is:ie) = var(ks:ke,js:je,is:ie)3482 var_tmp(ks:ke,nys:nyn,nxl:nxr) = var(ks:ke,nys:nyn,nxl:nxr) 3500 3483 ! 3501 3484 !-- Resize the array 3502 3485 DEALLOCATE( var ) 3503 ALLOCATE( var(ks:ke, js-nbgp:je+nbgp,is-nbgp:ie+nbgp) )3486 ALLOCATE( var(ks:ke,nys-nbgp:nyn+nbgp,nxl-nbgp:nxr+nbgp) ) 3504 3487 ! 3505 3488 !-- Transfer temporary copy back to original array 3506 var(ks:ke, js:je,is:ie) = var_tmp(ks:ke,js:je,is:ie)3507 3508 END SUBROUTINE resize_array_3d_int83489 var(ks:ke,nys:nyn,nxl:nxr) = var_tmp(ks:ke,nys:nyn,nxl:nxr) 3490 3491 END SUBROUTINE add_ghost_layers_3d_int8 3509 3492 3510 3493 … … 3514 3497 !> Resize 3D Real array: (:,nys:nyn,nxl:nxr) -> (:,nysg:nyng,nxlg:nxrg) 3515 3498 !--------------------------------------------------------------------------------------------------! 3516 SUBROUTINE resize_array_3d_real( var, ks, ke, js, je, is, ie )3499 SUBROUTINE add_ghost_layers_3d_real( var, ks, ke ) 3517 3500 3518 3501 IMPLICIT NONE 3519 3502 3520 INTEGER(iwp) :: ie !< upper index bound along x direction3521 INTEGER(iwp) :: is !< lower index bound along x direction3522 INTEGER(iwp) :: je !< upper index bound along y direction3523 INTEGER(iwp) :: js !< lower index bound along y direction3524 3503 INTEGER(iwp) :: ke !< upper bound of treated array in z-direction 3525 3504 INTEGER(iwp) :: ks !< lower bound of treated array in z-direction … … 3529 3508 ! 3530 3509 !-- Allocate temporary variable 3531 ALLOCATE( var_tmp(ks:ke, js-nbgp:je+nbgp,is-nbgp:ie+nbgp) )3510 ALLOCATE( var_tmp(ks:ke,nys-nbgp:nyn+nbgp,nxl-nbgp:nxr+nbgp) ) 3532 3511 ! 3533 3512 !-- Temporary copy of the variable 3534 var_tmp(ks:ke, js:je,is:ie) = var(ks:ke,js:je,is:ie)3513 var_tmp(ks:ke,nys:nyn,nxl:nxr) = var(ks:ke,nys:nyn,nxl:nxr) 3535 3514 ! 3536 3515 !-- Resize the array 3537 3516 DEALLOCATE( var ) 3538 ALLOCATE( var(ks:ke, js-nbgp:je+nbgp,is-nbgp:ie+nbgp) )3517 ALLOCATE( var(ks:ke,nys-nbgp:nyn+nbgp,nxl-nbgp:nxr+nbgp) ) 3539 3518 ! 3540 3519 !-- Transfer temporary copy back to original array 3541 var(ks:ke, js:je,is:ie) = var_tmp(ks:ke,js:je,is:ie)3542 3543 END SUBROUTINE resize_array_3d_real3520 var(ks:ke,nys:nyn,nxl:nxr) = var_tmp(ks:ke,nys:nyn,nxl:nxr) 3521 3522 END SUBROUTINE add_ghost_layers_3d_real 3544 3523 3545 3524 … … 3549 3528 !> Resize 4D Real array: (:,:,nys:nyn,nxl:nxr) -> (:,nysg:nyng,nxlg:nxrg) 3550 3529 !--------------------------------------------------------------------------------------------------! 3551 SUBROUTINE resize_array_4d_real( var, k1s, k1e, k2s, k2e, js, je, is, ie )3530 SUBROUTINE add_ghost_layers_4d_real( var, k1s, k1e, k2s, k2e ) 3552 3531 3553 3532 IMPLICIT NONE 3554 3533 3555 INTEGER(iwp) :: ie !< upper index bound along x direction3556 INTEGER(iwp) :: is !< lower index bound along x direction3557 INTEGER(iwp) :: je !< upper index bound along y direction3558 INTEGER(iwp) :: js !< lower index bound along y direction3559 3534 INTEGER(iwp) :: k1e !< upper bound of treated array in z-direction 3560 3535 INTEGER(iwp) :: k1s !< lower bound of treated array in z-direction … … 3566 3541 ! 3567 3542 !-- Allocate temporary variable 3568 ALLOCATE( var_tmp(k1s:k1e,k2s:k2e, js-nbgp:je+nbgp,is-nbgp:ie+nbgp) )3543 ALLOCATE( var_tmp(k1s:k1e,k2s:k2e,nys-nbgp:nyn+nbgp,nxl-nbgp:nxr+nbgp) ) 3569 3544 ! 3570 3545 !-- Temporary copy of the variable 3571 var_tmp(k1s:k1e,k2s:k2e, js:je,is:ie) = var(k1s:k1e,k2s:k2e,js:je,is:ie)3546 var_tmp(k1s:k1e,k2s:k2e,nys:nyn,nxl:nxr) = var(k1s:k1e,k2s:k2e,nys:nyn,nxl:nxr) 3572 3547 ! 3573 3548 !-- Resize the array 3574 3549 DEALLOCATE( var ) 3575 ALLOCATE( var(k1s:k1e,k2s:k2e, js-nbgp:je+nbgp,is-nbgp:ie+nbgp) )3550 ALLOCATE( var(k1s:k1e,k2s:k2e,nys-nbgp:nyn+nbgp,nxl-nbgp:nxr+nbgp) ) 3576 3551 ! 3577 3552 !-- Transfer temporary copy back to original array 3578 var(k1s:k1e,k2s:k2e, js:je,is:ie) = var_tmp(k1s:k1e,k2s:k2e,js:je,is:ie)3579 3580 END SUBROUTINE resize_array_4d_real3553 var(k1s:k1e,k2s:k2e,nys:nyn,nxl:nxr) = var_tmp(k1s:k1e,k2s:k2e,nys:nyn,nxl:nxr) 3554 3555 END SUBROUTINE add_ghost_layers_4d_real 3581 3556 3582 3557
Note: See TracChangeset
for help on using the changeset viewer.