From 1796c1d191556e095364152d2a55aa85e6d10e92 Mon Sep 17 00:00:00 2001 From: Philippe WAUTELET <philippe.wautelet@aero.obs-mip.fr> Date: Thu, 22 Sep 2022 10:43:45 +0200 Subject: [PATCH] Philippe 22/09/2022: add XXHAT_ll, XYHAT_ll, XHATM_ll and XYHATM_ll and use them --- src/LIB/SURCOUCHE/src/mode_field.f90 | 60 ++++++- src/LIB/SURCOUCHE/src/mode_io_write_nc4.f90 | 36 +++-- src/MNH/fun.f90 | 34 +--- src/MNH/ibm_idealrp.f90 | 15 +- src/MNH/ini_les_cart_maskn.f90 | 25 +-- src/MNH/ini_lesn.f90 | 24 +-- src/MNH/ini_modeln.f90 | 5 +- src/MNH/ini_spectren.f90 | 1 + src/MNH/modd_gridn.f90 | 7 +- src/MNH/modd_shadowsn.f90 | 19 +-- src/MNH/prep_ideal_case.f90 | 12 +- src/MNH/read_hgridn.f90 | 4 +- src/MNH/read_ver_grid.f90 | 4 +- src/MNH/set_grid.f90 | 166 ++++++++++++-------- src/MNH/set_perturb.f90 | 21 +-- src/MNH/spawn_grid2.f90 | 15 +- src/MNH/spawn_model2.f90 | 1 + src/MNH/surf_solar_shadows.f90 | 11 +- src/MNH/turb_ver_thermo_flux.f90 | 16 -- 19 files changed, 252 insertions(+), 224 deletions(-) diff --git a/src/LIB/SURCOUCHE/src/mode_field.f90 b/src/LIB/SURCOUCHE/src/mode_field.f90 index 71eefd211..4e444469a 100644 --- a/src/LIB/SURCOUCHE/src/mode_field.f90 +++ b/src/LIB/SURCOUCHE/src/mode_field.f90 @@ -468,7 +468,7 @@ call Add_field2list( TFIELDDATA( & CLONGNAME = 'XHATM', & CUNITS = 'm', & CDIR = 'XX', & - CCOMMENT = 'Position x in the conformal or cartesian plane at mass point', & + CCOMMENT = 'Position x in the conformal or cartesian plane at mass points', & NGRID = 1, & NTYPE = TYPEREAL, & NDIMS = 1, & @@ -480,7 +480,7 @@ call Add_field2list( TFIELDDATA( & CLONGNAME = 'YHATM', & CUNITS = 'm', & CDIR = 'YY', & - CCOMMENT = 'Position y in the conformal or cartesian plane at mass point', & + CCOMMENT = 'Position y in the conformal or cartesian plane at mass points', & NGRID = 1, & NTYPE = TYPEREAL, & NDIMS = 1, & @@ -780,6 +780,58 @@ call Add_field2list( TFIELDDATA( & NDIMS = 2, & LTIMEDEP = .FALSE. ) ) +!Note: do not use XHAT_ll in I/O (use XHAT instead) +call Add_field2list( TFIELDDATA( & + CMNHNAME = 'XHAT_ll', & + CSTDNAME = 'projection_x_coordinate', & + CLONGNAME = 'XHAT_ll', & + CUNITS = 'm', & + CDIR = 'XX', & + CCOMMENT = 'Position x in the conformal or cartesian plane (all domain)', & + NGRID = 2, & + NTYPE = TYPEREAL, & + NDIMS = 1, & + LTIMEDEP = .FALSE. ) ) + +!Note: do not use YHAT_ll in I/O (use YHAT instead) +call Add_field2list( TFIELDDATA( & + CMNHNAME = 'YHAT_ll', & + CSTDNAME = 'projection_y_coordinate', & + CLONGNAME = 'YHAT_ll', & + CUNITS = 'm', & + CDIR = 'YY', & + CCOMMENT = 'Position y in the conformal or cartesian plane (all domain)', & + NGRID = 3, & + NTYPE = TYPEREAL, & + NDIMS = 1, & + LTIMEDEP = .FALSE. ) ) + +!Note: do not use XHATM_ll in I/O (use XHATM instead) +call Add_field2list( TFIELDDATA( & + CMNHNAME = 'XHATM_ll', & + CSTDNAME = 'projection_x_coordinate', & + CLONGNAME = 'XHATL_ll', & + CUNITS = 'm', & + CDIR = 'XX', & + CCOMMENT = 'Position x in the conformal or cartesian plane at mass points (all domain)', & + NGRID = 2, & + NTYPE = TYPEREAL, & + NDIMS = 1, & + LTIMEDEP = .FALSE. ) ) + +!Note: do not use YHATM_ll in I/O (use YHATM instead) +call Add_field2list( TFIELDDATA( & + CMNHNAME = 'YHATM_ll', & + CSTDNAME = 'projection_y_coordinate', & + CLONGNAME = 'YHATM_ll', & + CUNITS = 'm', & + CDIR = 'YY', & + CCOMMENT = 'Position y in the conformal or cartesian plane at mass points (all domain)', & + NGRID = 3, & + NTYPE = TYPEREAL, & + NDIMS = 1, & + LTIMEDEP = .FALSE. ) ) + call Add_field2list( TFIELDDATA( & CMNHNAME = 'ZS', & CSTDNAME = 'surface_altitude', & @@ -3673,6 +3725,10 @@ call Goto_model_1field( 'SINSLOPE', kfrom, kto, XSINSLOPE ) call Goto_model_1field( 'MAP', kfrom, kto, XMAP ) call Goto_model_1field( 'LAT', kfrom, kto, XLAT ) call Goto_model_1field( 'LON', kfrom, kto, XLON ) +call Goto_model_1field( 'XHAT_ll', kfrom, kto, XXHAT_ll ) +call Goto_model_1field( 'YHAT_ll', kfrom, kto, XYHAT_ll ) +call Goto_model_1field( 'XHATM_ll', kfrom, kto, XXHATM_ll ) +call Goto_model_1field( 'YHATM_ll', kfrom, kto, XYHATM_ll ) ! ! MODD_TIME_n variables ! diff --git a/src/LIB/SURCOUCHE/src/mode_io_write_nc4.f90 b/src/LIB/SURCOUCHE/src/mode_io_write_nc4.f90 index 65ffbdc8e..43a779e3e 100644 --- a/src/LIB/SURCOUCHE/src/mode_io_write_nc4.f90 +++ b/src/LIB/SURCOUCHE/src/mode_io_write_nc4.f90 @@ -1450,7 +1450,7 @@ use modd_field, only: NMNHDIM_NI, NMNHDIM_NJ, NMNHDIM_NI_U, NMNHDIM_NJ_U, N NMNHDIM_PROFILER_TIME, NMNHDIM_STATION_TIME, & tfieldlist use modd_grid, only: xlatori, xlonori -use modd_grid_n, only: lsleve, xxhat, xxhatm, xyhat, xyhatm, xzhat, xzhatm +use modd_grid_n, only: lsleve, xxhat, xxhatm, xyhat, xyhatm, xzhat, xzhatm, xxhat_ll, xyhat_ll, xxhatm_ll, xyhatm_ll use modd_les, only: cles_level_type, cspectra_level_type, nlesn_iinf, nlesn_isup, nlesn_jinf, nlesn_jsup, & nles_k, nles_levels, nspectra_k, nspectra_levels, & xles_altitudes, xspectra_altitudes @@ -1494,9 +1494,9 @@ type(tdimnc), pointer :: tzdim_ni, tzdim_nj, tzd type(date_time), dimension(:), allocatable :: tzdates type(date_time), dimension(:,:), allocatable :: tzdates_bound +real, dimension(:), pointer :: zxhat_glob, zyhat_glob +real, dimension(:), pointer :: zxhatm_glob, zyhatm_glob !These variables are save: they are populated once for the master Z-split file and freed after the last file has been written -real, dimension(:), pointer, save :: zxhat_glob => null(), zyhat_glob => null() -real, dimension(:), pointer, save :: zxhatm_glob => null(), zyhatm_glob => null() real, dimension(:,:), pointer, save :: zlatm_glob => null(), zlonm_glob => null() real, dimension(:,:), pointer, save :: zlatu_glob => null(), zlonu_glob => null() real, dimension(:,:), pointer, save :: zlatv_glob => null(), zlonv_glob => null() @@ -1511,6 +1511,10 @@ zzhat => null() zxhatm => null() zyhatm => null() zzhatm => null() +zxhat_glob => null() +zyhat_glob => null() +zxhatm_glob => null() +zyhatm_glob => null() gchangemodel = .false. @@ -1538,6 +1542,14 @@ if ( tpfile%nmodel > 0 ) then zzhat => tfieldlist(iid)%tfield_x1d(tpfile%nmodel)%data call Find_field_id_from_mnhname( 'ZHATM', iid, iresp ) zzhatm => tfieldlist(iid)%tfield_x1d(tpfile%nmodel)%data + call Find_field_id_from_mnhname( 'XHAT_ll', iid, iresp ) + zxhat_glob => tfieldlist(iid)%tfield_x1d(tpfile%nmodel)%data + call Find_field_id_from_mnhname( 'YHAT_ll', iid, iresp ) + zyhat_glob => tfieldlist(iid)%tfield_x1d(tpfile%nmodel)%data + call Find_field_id_from_mnhname( 'XHATM_ll', iid, iresp ) + zxhatm_glob => tfieldlist(iid)%tfield_x1d(tpfile%nmodel)%data + call Find_field_id_from_mnhname( 'YHATM_ll', iid, iresp ) + zyhatm_glob => tfieldlist(iid)%tfield_x1d(tpfile%nmodel)%data call Find_field_id_from_mnhname( 'SLEVE', iid, iresp ) gsleve => tfieldlist(iid)%tfield_l0d(tpfile%nmodel)%data @@ -1553,6 +1565,10 @@ else zxhatm => xxhatm zyhatm => xyhatm zzhatm => xzhatm + zxhat_glob => xxhat_ll + zyhat_glob => xyhat_ll + zxhatm_glob => xxhatm_ll + zyhatm_glob => xyhatm_ll gsleve => lsleve end if @@ -1581,14 +1597,6 @@ else tzdim_nj_v => Null() end if -!If the file is a Z-split subfile, coordinates are already collected -if ( .not. Associated( tpfile%tmainfile ) ) then - call Gather_hor_coord1d( 'X', zxhat, zxhat_glob ) - call Gather_hor_coord1d( 'X', zxhatm, zxhatm_glob ) - call Gather_hor_coord1d( 'Y', zyhat, zyhat_glob ) - call Gather_hor_coord1d( 'Y', zyhatm, zyhatm_glob ) -end if - call Write_hor_coord1d( tzdim_ni, 'x-dimension of the grid', & trim(ystdnameprefix)//'_x_coordinate', 'X', 0., jphext, jphext, zxhatm_glob ) call Write_hor_coord1d( tzdim_nj, 'y-dimension of the grid', & @@ -1602,7 +1610,6 @@ call Write_hor_coord1d( tzdim_ni_v, 'x-dimension of the grid at v location', & call Write_hor_coord1d( tzdim_nj_v, 'y-dimension of the grid at v location', & trim(ystdnameprefix)//'_y_coordinate_at_v_location', 'Y', -0.5, jphext, 0, zyhat_glob ) -!The z?hat*_glob were allocated in Gather_hor_coord1d calls !Deallocate only if it is a non Z-split file or the last Z-split subfile gdealloc = .false. if ( Associated( tpfile%tmainfile ) ) then @@ -1867,13 +1874,14 @@ if ( tpfile%lmaster ) then end if -if ( gdealloc ) deallocate( zxhat_glob, zxhatm_glob, zyhat_glob, zyhatm_glob ) if ( gchangemodel ) call Go_tomodel_ll( imi, iresp ) contains +#if 0 +!Not used anymore subroutine Gather_hor_coord1d( haxis, pcoords_loc, pcoords_glob ) use mode_allocbuffer_ll, only: Allocbuffer_ll use mode_gather_ll, only: Gather_xxfield @@ -1917,7 +1925,9 @@ subroutine Gather_hor_coord1d( haxis, pcoords_loc, pcoords_glob ) !PW: TODO: broadcast only to subfile writers if ( tpfile%nsubfiles_ioz > 0 ) & call MPI_BCAST( pcoords_glob, size( pcoords_glob ), MNHREAL_MPI, tpfile%nmaster_rank - 1, tpfile%nmpicomm, ierr ) + end subroutine Gather_hor_coord1d +#endif subroutine Gather_hor_coord2d( px, py, plat_glob, plon_glob ) diff --git a/src/MNH/fun.f90 b/src/MNH/fun.f90 index 64c54caa6..85100a77b 100644 --- a/src/MNH/fun.f90 +++ b/src/MNH/fun.f90 @@ -88,7 +88,6 @@ END MODULE MODI_FUN !* 0. DECLARATIONS ! ------------ ! -USE MODE_GATHER_ll USE MODD_GRID_n USE MODD_DIM_n USE MODD_PARAMETERS @@ -110,7 +109,6 @@ INTEGER :: JJ ,JK ! Loop index INTEGER :: IINFO_ll, IJU_ll ! parallel variables REAL :: ZWIDTHY ! Width of the jet along the y direction REAL :: ZWIDTHZ ! Width of the jet along the z direction -REAL, DIMENSION(:), ALLOCATABLE :: ZYHAT_ll ! !------------------------------------------------------------------------------- ! @@ -120,18 +118,15 @@ REAL, DIMENSION(:), ALLOCATABLE :: ZYHAT_ll IJU_ll=NJMAX_ll+2*JPHEXT IJ0=IJU_ll/2 IK0=KKU/2 -ALLOCATE(ZYHAT_ll(IJU_ll)) -CALL GATHERALL_FIELD_ll('YY',XYHAT,ZYHAT_ll,IINFO_ll) -ZWIDTHY =ZYHAT_ll(IJ0+IJU_ll/5)-ZYHAT_ll(IJ0) +ZWIDTHY =XYHAT_ll(IJ0+IJU_ll/5)-XYHAT_ll(IJ0) ZWIDTHZ =PZHAT(IK0+KKU/5)-PZHAT(IK0) DO JJ = 1,KJU-1 DO JK = 1,KKU FUNUYZ(JJ,JK) = 1./COSH( & - (( XYHATM(JJ)-ZYHAT_ll(IJ0))/ZWIDTHY) **2 & + (( XYHATM(JJ)-XYHAT_ll(IJ0))/ZWIDTHY) **2 & +(( PZHAT(JK) - PZHAT(IK0))/ZWIDTHZ) **2 ) END DO END DO -DEALLOCATE(ZYHAT_ll) FUNUYZ(KJU,:)=2.*FUNUYZ(KJU-1,:)-FUNUYZ(KJU-2,:) !simple extrapolation !for the last point ! @@ -189,7 +184,6 @@ END FUNCTION FUNUYZ USE MODD_GRID_n USE MODD_DIM_n USE MODD_PARAMETERS -USE MODE_GATHER_ll ! ! IMPLICIT NONE @@ -206,18 +200,15 @@ INTEGER :: IJ0 ! Jet center INTEGER :: JJ ! Loop index INTEGER :: IINFO_ll, IJU_ll ! parallel variables REAL :: ZWIDTH ! Width of the jet -REAL, DIMENSION(:), ALLOCATABLE :: ZYHAT_ll !------------------------------------------------------------------------------- ! !* 1. COMPUTE FUNUY ! ------------- IJU_ll=NJMAX_ll+2*JPHEXT IJ0=IJU_ll/2 -ALLOCATE(ZYHAT_ll(IJU_ll)) -CALL GATHERALL_FIELD_ll('YY',XYHAT,ZYHAT_ll,IINFO_ll) -ZWIDTH=ZYHAT_ll(IJ0+IJU_ll/5)-ZYHAT_ll(IJ0) +ZWIDTH=XYHAT_ll(IJ0+IJU_ll/5)-XYHAT_ll(IJ0) DO JJ = 1,KJU-1 - FUNUY(JJ) = 1./COSH((XYHATM(JJ)-ZYHAT_ll(IJ0))/ZWIDTH) + FUNUY(JJ) = 1./COSH((XYHATM(JJ)-XYHAT_ll(IJ0))/ZWIDTH) END DO FUNUY(KJU)=2.*FUNUY(KJU-1)-FUNUY(KJU-2) !simple extrapolation for the last point ! @@ -276,7 +267,6 @@ END FUNCTION FUNUY !* 0. DECLARATIONS ! ------------ ! -USE MODE_GATHER_ll USE MODD_GRID_n USE MODD_DIM_n USE MODD_PARAMETERS @@ -298,7 +288,6 @@ INTEGER :: JI,JK ! Loop index INTEGER :: IINFO_ll, IIU_ll ! parallel variables REAL :: ZWIDTHX ! Width of the jet along the x direction REAL :: ZWIDTHZ ! Width of the jet along the z direction -REAL, DIMENSION(:), ALLOCATABLE :: ZXHAT_ll ! !------------------------------------------------------------------------------- ! @@ -308,14 +297,12 @@ REAL, DIMENSION(:), ALLOCATABLE :: ZXHAT_ll IIU_ll=NIMAX_ll+2*JPHEXT II0=IIU_ll/2 IK0=KKU/2 -ALLOCATE(ZXHAT_ll(IIU_ll)) -CALL GATHERALL_FIELD_ll('XX',XXHAT,ZXHAT_ll,IINFO_ll) -ZWIDTHX=ZXHAT_ll(II0+IIU_ll/5)-ZXHAT_ll(II0) +ZWIDTHX=XXHAT_ll(II0+IIU_ll/5)-XXHAT_ll(II0) ZWIDTHZ=PZHAT(IK0+KKU/5)-PZHAT(IK0) DO JI = 1,KIU-1 DO JK = 1,KKU FUNVXZ(JI,JK) = 1./COSH( & - (( XXHATM(JI)-ZXHAT_ll(II0))/ZWIDTHX)**2 & + (( XXHATM(JI)-XXHAT_ll(II0))/ZWIDTHX)**2 & +(( PZHAT (JK) - PZHAT (IK0))/ZWIDTHZ)**2 ) END DO END DO @@ -372,7 +359,6 @@ END FUNCTION FUNVXZ !* 0. DECLARATIONS ! ------------ ! -USE MODE_GATHER_ll USE MODD_GRID_n USE MODD_DIM_n USE MODD_PARAMETERS @@ -392,20 +378,16 @@ INTEGER :: II0 ! Jet center INTEGER :: JI ! Loop index INTEGER :: IINFO_ll, IIU_ll ! parallel variables REAL :: ZWIDTH ! Width of the jet -REAL, DIMENSION(:), ALLOCATABLE :: ZXHAT_ll !------------------------------------------------------------------------------- ! !* 1. COMPUTE FUNUY ! ------------- IIU_ll=NIMAX_ll+2*JPHEXT II0=IIU_ll/2 -ALLOCATE(ZXHAT_ll(IIU_ll)) -CALL GATHERALL_FIELD_ll('XX',XXHAT,ZXHAT_ll,IINFO_ll) -ZWIDTH=ZXHAT_ll(II0+IIU_ll/5)-ZXHAT_ll(II0) +ZWIDTH=XXHAT_ll(II0+IIU_ll/5)-XXHAT_ll(II0) DO JI = 1,KIU - FUNVX(JI)=1./COSH((XXHATM(JI)-ZXHAT_ll(II0))/ZWIDTH) + FUNVX(JI)=1./COSH((XXHATM(JI)-XXHAT_ll(II0))/ZWIDTH) END DO -DEALLOCATE(ZXHAT_ll) !------------------------------------------------------------------------------- ! END FUNCTION FUNVX diff --git a/src/MNH/ibm_idealrp.f90 b/src/MNH/ibm_idealrp.f90 index a67bb5fd2..3c2a0c77d 100644 --- a/src/MNH/ibm_idealrp.f90 +++ b/src/MNH/ibm_idealrp.f90 @@ -1,4 +1,4 @@ -!MNH_LIC Copyright 2019-2021 CNRS, Meteo-France and Universite Paul Sabatier +!MNH_LIC Copyright 2019-2022 CNRS, Meteo-France and Universite Paul Sabatier !MNH_LIC This is part of the Meso-NH software governed by the CeCILL-C licence !MNH_LIC version 1. See LICENSE, CeCILL-C_V1-en.txt and CeCILL-C_V1-fr.txt !MNH_LIC for details. version 1. @@ -68,12 +68,11 @@ SUBROUTINE IBM_IDEALRP(KNUMB_OBS,PIBM_XYZ,PPHI) USE MODE_POS USE MODE_ll USE MODE_IO - USE MODE_GATHER_ll ! ! declaration USE MODD_IBM_PARAM_n USE MODD_DIM_n, ONLY: NIMAX,NJMAX,NKMAX - USE MODD_GRID_n, ONLY: XXHAT,XYHAT,XZHAT,XZZ + USE MODD_GRID_n, ONLY: XXHAT,XYHAT,XZHAT, XXHAT_ll, XYHAT_ll, XZZ USE MODD_PARAMETERS, ONLY: JPVEXT,JPHEXT ! ! interface @@ -105,7 +104,6 @@ SUBROUTINE IBM_IDEALRP(KNUMB_OBS,PIBM_XYZ,PPHI) REAL, ALLOCATABLE :: ZDIST_SUR6,ZDIST_REF0 REAL, DIMENSION(:,:,:), ALLOCATABLE :: ZXHATM,ZYHATM,ZZHATM ! mesh location (mass nodes) REAL, DIMENSION(:,:,:), ALLOCATABLE :: ZXHATC,ZYHATC,ZZHATC ! mesh location (cell nodes) - REAL, DIMENSION(:) , ALLOCATABLE :: ZXHAT_ll,ZYHAT_ll CHARACTER(LEN=1) :: YPOS INTEGER :: NRESP ! @@ -140,14 +138,10 @@ SUBROUTINE IBM_IDEALRP(KNUMB_OBS,PIBM_XYZ,PPHI) ! ---------------- ! CALL GET_GLOBALDIMS_ll(IIU_ll,IJU_ll) - ALLOCATE(ZXHAT_ll(IIU_ll+ 2 * JPHEXT)) - ALLOCATE(ZYHAT_ll(IJU_ll+ 2 * JPHEXT)) - CALL GATHERALL_FIELD_ll('XX',XXHAT,ZXHAT_ll,NRESP) - CALL GATHERALL_FIELD_ll('YY',XYHAT,ZYHAT_ll,NRESP) ZDELTX = abs((PIBM_XYZ(KNUMB_OBS,1)-PIBM_XYZ(KNUMB_OBS,2))/ & - ((ZXHAT_ll(IIU_ll+2)-ZXHAT_ll(2))/(IIU_ll*1.))) + ((XXHAT_ll(IIU_ll+2)-XXHAT_ll(2))/(IIU_ll*1.))) ZDELTY = abs((PIBM_XYZ(KNUMB_OBS,3)-PIBM_XYZ(KNUMB_OBS,4))/ & - ((ZYHAT_ll(IJU_ll+2)-ZYHAT_ll(2))/(IJU_ll*1.))) + ((XYHAT_ll(IJU_ll+2)-XYHAT_ll(2))/(IJU_ll*1.))) ZDELTZ = abs((PIBM_XYZ(KNUMB_OBS,5)-PIBM_XYZ(KNUMB_OBS,6))/ & ((XZHAT(IKU)-XZHAT(2))/(IKU*1.-2.))) ! @@ -301,7 +295,6 @@ SUBROUTINE IBM_IDEALRP(KNUMB_OBS,PIBM_XYZ,PPHI) ! ----------------------- ! DEALLOCATE(ZXHATC,ZYHATC,ZZHATC) - DEALLOCATE(ZXHAT_ll,ZYHAT_ll) DEALLOCATE(ZTEST_XMIN,ZTEST_XMAX,ZTEST_YMIN,ZTEST_YMAX,ZTEST_ZMIN,ZTEST_ZMAX) DEALLOCATE(ZPOSI_XYZ0,ZPOSI_XYZ1,ZPOSI_XYZ2) DEALLOCATE(ZDIST_SUR0,ZDIST_SUR1,ZDIST_SUR2,ZDIST_SUR3,ZDIST_SUR4,ZDIST_SUR5,ZDIST_SUR6,ZDIST_REF0) diff --git a/src/MNH/ini_les_cart_maskn.f90 b/src/MNH/ini_les_cart_maskn.f90 index a3e9c7840..822d41581 100644 --- a/src/MNH/ini_les_cart_maskn.f90 +++ b/src/MNH/ini_les_cart_maskn.f90 @@ -1,4 +1,4 @@ -!MNH_LIC Copyright 2000-2021 CNRS, Meteo-France and Universite Paul Sabatier +!MNH_LIC Copyright 2000-2022 CNRS, Meteo-France and Universite Paul Sabatier !MNH_LIC This is part of the Meso-NH software governed by the CeCILL-C licence !MNH_LIC version 1. See LICENSE, CeCILL-C_V1-en.txt and CeCILL-C_V1-fr.txt !MNH_LIC for details. version 1. @@ -93,9 +93,6 @@ INTEGER, INTENT(OUT) :: KLES_JSUP ! ! 0.2 declaration of local variables ! ! -INTEGER :: IIMAX_ll ! total physical father domain I size -INTEGER :: IJMAX_ll ! total physical father domain J size -! INTEGER :: IIB_ll ! son domain index INTEGER :: IIE_ll ! son domain index INTEGER :: IJB_ll ! son domain index @@ -103,12 +100,12 @@ INTEGER :: IJE_ll ! son domain index ! INTEGER :: JI, JJ ! loop counters ! -REAL :: ZX, ZY ! coordinates of msak boundaries +REAL :: ZX, ZY ! coordinates of mask boundaries ! -INTEGER :: IINFO_ll, IRESP +INTEGER :: IINFO_ll ! -REAL, DIMENSION(:), ALLOCATABLE :: ZXHAT_ll ! father model coordinates -REAL, DIMENSION(:), ALLOCATABLE :: ZYHAT_ll ! +REAL, DIMENSION(:), POINTER :: ZXHAT_ll ! father model coordinates +REAL, DIMENSION(:), POINTER :: ZYHAT_ll ! INTEGER :: IMI ! IMI = GET_CURRENT_MODEL_INDEX() @@ -118,11 +115,8 @@ IMI = GET_CURRENT_MODEL_INDEX() ! -------------------------- ! CALL GO_TOMODEL_ll(IMI, IINFO_ll) -CALL GET_GLOBALDIMS_ll(IIMAX_ll,IJMAX_ll) -ALLOCATE(ZXHAT_ll(IIMAX_ll+ 2 * JPHEXT)) -ALLOCATE(ZYHAT_ll(IJMAX_ll+ 2 * JPHEXT)) -CALL GATHERALL_FIELD_ll('XX',XXHAT,ZXHAT_ll,IRESP) -CALL GATHERALL_FIELD_ll('YY',XYHAT,ZYHAT_ll,IRESP) +ZXHAT_ll => XXHAT_ll +ZYHAT_ll => XYHAT_ll ! CALL GO_TOMODEL_ll(KMI, IINFO_ll) ! @@ -208,9 +202,6 @@ ELSE END IF ! !------------------------------------------------------------------------------- -DEALLOCATE(ZXHAT_ll) -DEALLOCATE(ZYHAT_ll) -!------------------------------------------------------------------------------- ! CONTAINS ! @@ -219,8 +210,6 @@ DEALLOCATE(ZYHAT_ll) KLES_ISUP=IIE_ll-JPHEXT KLES_JINF=IJB_ll-JPHEXT KLES_JSUP=IJE_ll-JPHEXT - DEALLOCATE(ZXHAT_ll) - DEALLOCATE(ZYHAT_ll) END SUBROUTINE MASK_OVER_ALL_DOMAIN ! END SUBROUTINE INI_LES_CART_MASK_n diff --git a/src/MNH/ini_lesn.f90 b/src/MNH/ini_lesn.f90 index 84f90dba5..0b565244c 100644 --- a/src/MNH/ini_lesn.f90 +++ b/src/MNH/ini_lesn.f90 @@ -46,8 +46,6 @@ !* 0. DECLARATIONS ! ------------ ! -USE MODE_ll -USE MODE_GATHER_ll USE MODE_MSG USE MODE_MODELN_HANDLER ! @@ -90,25 +88,20 @@ IMPLICIT NONE ! INTEGER :: ILUOUT, IRESP INTEGER :: JI,JJ, JK ! loop counters -INTEGER :: IIU_ll ! total domain I size -INTEGER :: IJU_ll ! total domain J size -INTEGER :: IIMAX_ll ! total physical domain I size -INTEGER :: IJMAX_ll ! total physical domain J size ! REAL, DIMENSION(:,:,:), ALLOCATABLE :: ZZ_LES ! LES altitudes 3D array REAL, DIMENSION(:,:,:), ALLOCATABLE :: ZZ_SPEC! " for spectra ! ! -REAL, DIMENSION(:), ALLOCATABLE :: ZXHAT_ll ! father model coordinates -REAL, DIMENSION(:), ALLOCATABLE :: ZYHAT_ll ! +REAL, DIMENSION(:), POINTER :: ZXHAT_ll ! father model coordinates +REAL, DIMENSION(:), POINTER :: ZYHAT_ll ! INTEGER :: IMI ! !------------------------------------------------------------------------------- IMI = GET_CURRENT_MODEL_INDEX() ! -CALL GET_GLOBALDIMS_ll(IIMAX_ll,IJMAX_ll) -IIU_ll = IIMAX_ll+2*JPHEXT -IJU_ll = IJMAX_ll+2*JPHEXT +ZXHAT_ll => NULL() +ZYHAT_ll => NULL() ! ILUOUT = TLUOUT%NLU ! @@ -208,19 +201,14 @@ IF (IMI==1) THEN ! ----------------------------------------------------- ! ELSE - ALLOCATE(ZXHAT_ll(IIU_ll)) - ALLOCATE(ZYHAT_ll(IJU_ll)) - CALL GATHERALL_FIELD_ll('XX',XXHAT,ZXHAT_ll,IRESP) - CALL GATHERALL_FIELD_ll('YY',XYHAT,ZYHAT_ll,IRESP) + ZXHAT_ll => XXHAT_ll !Use current (IMI) model XXHAT_ll + ZYHAT_ll => XYHAT_ll ! CALL GOTO_MODEL(NDAD(IMI)) CALL INI_LES_CART_MASK_n(IMI,ZXHAT_ll,ZYHAT_ll, & NLESn_IINF(IMI),NLESn_JINF(IMI), & NLESn_ISUP(IMI),NLESn_JSUP(IMI) ) CALL GOTO_MODEL(IMI) -! - DEALLOCATE(ZXHAT_ll) - DEALLOCATE(ZYHAT_ll) END IF ! !* in non cyclic boundary conditions, limitiation of masks due to u and v grids diff --git a/src/MNH/ini_modeln.f90 b/src/MNH/ini_modeln.f90 index 9a4aed5cd..258172aeb 100644 --- a/src/MNH/ini_modeln.f90 +++ b/src/MNH/ini_modeln.f90 @@ -1859,6 +1859,7 @@ CALL SET_GRID( KMI, TPINIFILE, IKU, NIMAX_ll, NJMAX_ll, & XTSTEP, XSEGLEN, & XLONORI, XLATORI, XLON, XLAT, & XXHAT, XYHAT, XDXHAT, XDYHAT, XXHATM, XYHATM, & + XXHAT_ll, XYHAT_ll, XXHATM_ll, XYHATM_ll, & XHAT_BOUND, XHATM_BOUND, & XMAP, XZS, XZZ, XZHAT, XZHATM, XZTOP, LSLEVE, & XLEN1, XLEN2, XZSMT, ZJ, & @@ -2263,15 +2264,11 @@ IF (CRAD /= 'NONE') THEN IF (GINIRAD) CALL SUNPOS_n(XZENITH,PAZIMSOL=XAZIM) CALL SURF_SOLAR_GEOM (XZS, XZS_XY) ! - ALLOCATE(XXHAT_ll (IIU_ll)) - ALLOCATE(XYHAT_ll (IJU_ll)) ALLOCATE(XZS_ll (IIU_ll,IJU_ll)) ALLOCATE(XZS_XY_ll (IIU_ll,IJU_ll)) ! CALL GATHERALL_FIELD_ll('XY',XZS,XZS_ll,IRESP) CALL GATHERALL_FIELD_ll('XY',XZS_XY,XZS_XY_ll,IRESP) - CALL GATHERALL_FIELD_ll('XX',XXHAT,XXHAT_ll,IRESP) - CALL GATHERALL_FIELD_ll('YY',XYHAT,XYHAT_ll,IRESP) XZS_MAX_ll=MAXVAL(XZS_ll) ELSE XAZIM = XPI diff --git a/src/MNH/ini_spectren.f90 b/src/MNH/ini_spectren.f90 index 29b2679f0..b6e605ecc 100644 --- a/src/MNH/ini_spectren.f90 +++ b/src/MNH/ini_spectren.f90 @@ -689,6 +689,7 @@ CALL SET_GRID( KMI, TPINIFILE, IKU, NIMAX_ll, NJMAX_ll, & XTSTEP, XSEGLEN, & XLONORI, XLATORI, XLON, XLAT, & XXHAT, XYHAT, XDXHAT, XDYHAT, XXHATM, XYHATM, & + XXHAT_ll, XYHAT_ll, XXHATM_ll, XYHATM_ll, & XHAT_BOUND, XHATM_BOUND, & XMAP, XZS, XZZ, XZHAT, XZHATM, XZTOP, LSLEVE, & XLEN1, XLEN2, XZSMT, ZJ, & diff --git a/src/MNH/modd_gridn.f90 b/src/MNH/modd_gridn.f90 index 1f0c5d895..c5fcc566b 100644 --- a/src/MNH/modd_gridn.f90 +++ b/src/MNH/modd_gridn.f90 @@ -36,7 +36,8 @@ ! V. Ducrocq 13/08/98: //: add XLATOR_ll and XLONOR_ll ! V. Masson 11/2004: supress XLATOR, XLONOR, XLATOR_ll, XLONOR_ll ! P. Wautelet 05/2016-04/2018: new data structures and calls for I/O -! P. Wautelet 09/2022: add XXHATM, XYHATM, XZHATM, XHAT_BOUND and XHATM_BOUND +! P. Wautelet 09/2022: add XXHATM, XYHATM, XZHATM, XHAT_BOUND, XHATM_BOUND, +! XXHAT_ll, XYHAT_ll, XXHATM_ll and XYHATM_ll !------------------------------------------------------------------------------- ! !* 0. DECLARATIONS @@ -88,5 +89,9 @@ REAL, POINTER :: XLEN2=>NULL() ! Decay scale for s REAL, DIMENSION(:,:), POINTER :: XZSMT=>NULL() ! smooth orography for SLEVE coordinate REAL, DIMENSION(:), POINTER :: XHAT_BOUND => NULL() ! Boundaries of global domain at u and v points REAL, DIMENSION(:), POINTER :: XHATM_BOUND => NULL() ! Boundaries of global domain at mass points +REAL, DIMENSION(:), POINTER :: XXHAT_ll => NULL() ! Position x in the conformal or cartesian plane (all domain) +REAL, DIMENSION(:), POINTER :: XYHAT_ll => NULL() ! Position y in the conformal or cartesian plane (all domain) +REAL, DIMENSION(:), POINTER :: XXHATM_ll => NULL() ! Position x in the conformal or cartesian plane at mass points (all domain) +REAL, DIMENSION(:), POINTER :: XYHATM_ll => NULL() ! Position y in the conformal or cartesian plane (all domain) at mass points END MODULE MODD_GRID_n diff --git a/src/MNH/modd_shadowsn.f90 b/src/MNH/modd_shadowsn.f90 index b2ca81707..ebb1372e4 100644 --- a/src/MNH/modd_shadowsn.f90 +++ b/src/MNH/modd_shadowsn.f90 @@ -1,13 +1,8 @@ -!MNH_LIC Copyright 1994-2014 CNRS, Meteo-France and Universite Paul Sabatier +!MNH_LIC Copyright 2012-2022 CNRS, Meteo-France and Universite Paul Sabatier !MNH_LIC This is part of the Meso-NH software governed by the CeCILL-C licence -!MNH_LIC version 1. See LICENSE, CeCILL-C_V1-en.txt and CeCILL-C_V1-fr.txt +!MNH_LIC version 1. See LICENSE, CeCILL-C_V1-en.txt and CeCILL-C_V1-fr.txt !MNH_LIC for details. version 1. !----------------------------------------------------------------- -!--------------- special set of characters for RCS information -!----------------------------------------------------------------- -! $Source$ $Revision$ -! MASDEV4_7 modd 2006/11/23 17:28:44 -!----------------------------------------------------------------- ! ######################## MODULE MODD_SHADOWS_n ! ######################## @@ -34,7 +29,7 @@ !! MODIFICATIONS !! ------------- !! Original 04/2012 -!! +! P. Wautelet 22/09/2022: remove XXHAT_ll and XYHAT_ll (now in modd_grid_n) !------------------------------------------------------------------------------- ! !* 0. DECLARATIONS @@ -52,8 +47,6 @@ TYPE SHADOWS_t REAL, DIMENSION(:,:), POINTER :: XZS_XY=>NULL() ! orography at vort. points REAL, DIMENSION(:,:), POINTER :: XZS_ll=>NULL() ! orography at mass points (all domain) REAL, DIMENSION(:,:), POINTER :: XZS_XY_ll=>NULL() ! orography at vort. points (all domain) - REAL, DIMENSION(:), POINTER :: XXHAT_ll=>NULL() ! X coordinate (all domain) - REAL, DIMENSION(:), POINTER :: XYHAT_ll=>NULL() ! Y coordinate (all domain) ! ! END TYPE SHADOWS_t @@ -64,8 +57,6 @@ REAL, POINTER :: XZS_MAX_ll=>NULL() REAL, DIMENSION(:,:), POINTER :: XZS_XY=>NULL() REAL, DIMENSION(:,:), POINTER :: XZS_ll=>NULL() REAL, DIMENSION(:,:), POINTER :: XZS_XY_ll=>NULL() -REAL, DIMENSION(:), POINTER :: XXHAT_ll=>NULL() -REAL, DIMENSION(:), POINTER :: XYHAT_ll=>NULL() CONTAINS @@ -76,16 +67,12 @@ INTEGER, INTENT(IN) :: KFROM, KTO SHADOWS_MODEL(KFROM)%XZS_XY=>XZS_XY SHADOWS_MODEL(KFROM)%XZS_ll=>XZS_ll SHADOWS_MODEL(KFROM)%XZS_XY_ll=>XZS_XY_ll -SHADOWS_MODEL(KFROM)%XXHAT_ll=>XXHAT_ll -SHADOWS_MODEL(KFROM)%XYHAT_ll=>XYHAT_ll ! ! Current model is set to model KTO XZS_MAX_ll=>SHADOWS_MODEL(KTO)%XZS_MAX_ll XZS_XY=>SHADOWS_MODEL(KTO)%XZS_XY XZS_ll=>SHADOWS_MODEL(KTO)%XZS_ll XZS_XY_ll=>SHADOWS_MODEL(KTO)%XZS_XY_ll -XXHAT_ll=>SHADOWS_MODEL(KTO)%XXHAT_ll -XYHAT_ll=>SHADOWS_MODEL(KTO)%XYHAT_ll END SUBROUTINE SHADOWS_GOTO_MODEL diff --git a/src/MNH/prep_ideal_case.f90 b/src/MNH/prep_ideal_case.f90 index b4faa5ac1..d16492d7a 100644 --- a/src/MNH/prep_ideal_case.f90 +++ b/src/MNH/prep_ideal_case.f90 @@ -379,7 +379,7 @@ USE MODE_ll USE MODE_MODELN_HANDLER use mode_field, only: Alloc_field_scalars, Ini_field_list, Ini_field_scalars USE MODE_MSG -USE MODE_SET_GRID, only: INTERP_HORGRID_TO_MASSPOINTS, STORE_HORGRID_BOUNDS +USE MODE_SET_GRID, only: INTERP_HORGRID_TO_MASSPOINTS, STORE_GLOB_HORGRID ! USE MODI_DEFAULT_DESFM_n ! Interface modules USE MODI_DEFAULT_EXPRE @@ -552,7 +552,6 @@ INTEGER :: IISIZEX4,IJSIZEX4,IISIZEX2,IJSIZEX2 ! West-east LB arrays INTEGER :: IISIZEYF,IJSIZEYF,IISIZEYFV,IJSIZEYFV ! dimensions of the INTEGER :: IISIZEY4,IJSIZEY4,IISIZEY2,IJSIZEY2 ! North-south LB arrays INTEGER :: IBEG,IEND,IXOR,IXDIM,IYOR,IYDIM,ILBX,ILBY -REAL, DIMENSION(:), ALLOCATABLE :: ZXHAT_ll, ZYHAT_ll ! REAL, DIMENSION(:,:,:), ALLOCATABLE ::ZTHL,ZT,ZRT,ZFRAC_ICE,& ZEXN,ZLVOCPEXN,ZLSOCPEXN,ZCPH, & @@ -1286,7 +1285,7 @@ ELSE CALL INTERP_HORGRID_TO_MASSPOINTS( XXHAT, XYHAT, XXHATM, XYHATM ) ! Collect global domain boundaries - CALL STORE_HORGRID_BOUNDS( XXHAT, XYHAT, XXHATM, XYHATM, XHAT_BOUND, XHATM_BOUND ) + CALL STORE_GLOB_HORGRID( XXHAT, XYHAT, XXHATM, XYHATM, XXHAT_ll, XYHAT_ll, XXHATM_ll, XYHATM_ll, XHAT_BOUND, XHATM_BOUND ) END IF ! @@ -1455,12 +1454,9 @@ IF (CTYPELOC =='LATLON' ) THEN END IF END IF ! -ALLOCATE(ZXHAT_ll(NIMAX_ll+ 2 * JPHEXT),ZYHAT_ll(NJMAX_ll+2 * JPHEXT)) -CALL GATHERALL_FIELD_ll('XX',XXHAT,ZXHAT_ll,NRESP) !// -CALL GATHERALL_FIELD_ll('YY',XYHAT,ZYHAT_ll,NRESP) !// IF (CTYPELOC /= 'IJGRID') THEN - NILOC = MINLOC(ABS(XXHATLOC-ZXHAT_ll(:))) - NJLOC = MINLOC(ABS(XYHATLOC-ZYHAT_ll(:))) + NILOC = MINLOC(ABS(XXHATLOC-XXHAT_ll(:))) + NJLOC = MINLOC(ABS(XYHATLOC-XYHAT_ll(:))) END IF ! IF ( L1D .AND. ( NILOC(1) /= 1 .OR. NJLOC(1) /= 1 ) ) THEN diff --git a/src/MNH/read_hgridn.f90 b/src/MNH/read_hgridn.f90 index cfccf88ba..1ac466b48 100644 --- a/src/MNH/read_hgridn.f90 +++ b/src/MNH/read_hgridn.f90 @@ -93,7 +93,7 @@ USE MODE_IO, only: IO_Pack_set USE MODE_IO_FIELD_READ, only: IO_Field_read USE MODE_MSG USE MODE_MODELN_HANDLER -USE MODE_SET_GRID, only: INTERP_HORGRID_TO_MASSPOINTS, STORE_HORGRID_BOUNDS +USE MODE_SET_GRID, only: INTERP_HORGRID_TO_MASSPOINTS, STORE_GLOB_HORGRID use MODE_TOOLS_ll, only: GET_DIM_EXT_ll, GET_DIM_PHYS_ll, GET_INDICE_ll ! IMPLICIT NONE @@ -259,7 +259,7 @@ IF ( .NOT. ASSOCIATED(XYHATM) ) ALLOCATE( XYHATM(SIZE( XYHAT )) ) CALL INTERP_HORGRID_TO_MASSPOINTS( XXHAT, XYHAT, XXHATM, XYHATM ) ! Collect global domain boundaries -CALL STORE_HORGRID_BOUNDS( XXHAT, XYHAT, XXHATM, XYHATM, XHAT_BOUND, XHATM_BOUND ) +CALL STORE_GLOB_HORGRID( XXHAT, XYHAT, XXHATM, XYHATM, XXHAT_ll, XYHAT_ll, XXHATM_ll, XYHATM_ll, XHAT_BOUND, XHATM_BOUND ) !JUAN REALZ IF ( CPROGRAM .EQ. "REAL " ) THEN diff --git a/src/MNH/read_ver_grid.f90 b/src/MNH/read_ver_grid.f90 index a00d7a30a..44665594e 100644 --- a/src/MNH/read_ver_grid.f90 +++ b/src/MNH/read_ver_grid.f90 @@ -111,7 +111,7 @@ USE MODD_PARAMETERS ! USE MODE_MSG USE MODE_POS -USE MODE_SET_GRID, ONLY: INTERP_VERGRID_TO_MASSPOINTS, STORE_VERGRID_BOUNDS +USE MODE_SET_GRID, ONLY: INTERP_VERGRID_TO_MASSPOINTS, STORE_GLOB_VERGRID ! USE MODI_DEFAULT_SLEVE ! @@ -332,7 +332,7 @@ XZTOP = XZHAT(IKU) CALL INTERP_VERGRID_TO_MASSPOINTS( XZHAT, XZHATM ) ! Collect global domain boundaries -CALL STORE_VERGRID_BOUNDS( XZHAT, XZHATM, XHAT_BOUND, XHATM_BOUND ) +CALL STORE_GLOB_VERGRID( XZHAT, XZHATM, XHAT_BOUND, XHATM_BOUND ) !------------------------------------------------------------------------------- ! diff --git a/src/MNH/set_grid.f90 b/src/MNH/set_grid.f90 index e2d28d064..4ecfdf897 100644 --- a/src/MNH/set_grid.f90 +++ b/src/MNH/set_grid.f90 @@ -19,7 +19,7 @@ PUBLIC :: SET_GRID PUBLIC :: INTERP_HORGRID_1DIR_TO_MASSPOINTS, INTERP_HORGRID_TO_MASSPOINTS, INTERP_VERGRID_TO_MASSPOINTS -PUBLIC :: STORE_GRID_BOUNDS, STORE_HORGRID_BOUNDS, STORE_VERGRID_BOUNDS +PUBLIC :: STORE_GLOB_GRID, STORE_GLOB_HORGRID, STORE_GLOB_VERGRID CONTAINS @@ -29,6 +29,7 @@ CONTAINS PTSTEP, PSEGLEN, & PLONORI, PLATORI, PLON, PLAT, & PXHAT, PYHAT, PDXHAT, PDYHAT, PXHATM, PYHATM, & + PXHAT_ll, PYHAT_ll, PXHATM_ll, PYHATM_ll, & PHAT_BOUND, PHATM_BOUND, & PMAP, PZS, PZZ, PZHAT, PZHATM, PZTOP, OSLEVE, & PLEN1, PLEN2, PZSMT, PJ, & @@ -207,6 +208,10 @@ REAL, DIMENSION(:), INTENT(OUT) :: PDXHAT ! horizontal stretching in x REAL, DIMENSION(:), INTENT(OUT) :: PDYHAT ! horizontal stretching in y REAL, DIMENSION(:), INTENT(OUT) :: PXHATM ! Position x in the conformal plane or on the cartesian plane at mass points REAL, DIMENSION(:), INTENT(OUT) :: PYHATM ! Position y in the conformal plane or on the cartesian plane at mass points +REAL, DIMENSION(:), POINTER, INTENT(INOUT) :: PXHAT_ll ! Position x, y or z in the conformal or cartesian plane (all domain) +REAL, DIMENSION(:), POINTER, INTENT(INOUT) :: PYHAT_ll ! Position x, y or z in the conformal or cartesian plane (all domain) +REAL, DIMENSION(:), POINTER, INTENT(INOUT) :: PXHATM_ll ! id at mass points +REAL, DIMENSION(:), POINTER, INTENT(INOUT) :: PYHATM_ll ! id at mass points REAL, DIMENSION(:), POINTER, INTENT(INOUT) :: PHAT_BOUND ! Boundaries of global domain in the conformal or cartesian plane REAL, DIMENSION(:), POINTER, INTENT(INOUT) :: PHATM_BOUND ! idem at mass points REAL, DIMENSION(:,:), INTENT(OUT) :: PMAP ! Map factor @@ -353,7 +358,8 @@ CALL INTERP_HORGRID_TO_MASSPOINTS( PXHAT, PYHAT, PXHATM, PYHATM ) CALL INTERP_VERGRID_TO_MASSPOINTS( PZHAT, PZHATM ) ! Collect global domain boundaries -CALL STORE_GRID_BOUNDS( PXHAT, PYHAT, PZHAT, PXHATM, PYHATM, PZHATM, PHAT_BOUND, PHATM_BOUND ) +CALL STORE_GLOB_GRID( PXHAT, PYHAT, PZHAT, PXHATM, PYHATM, PZHATM, & + PXHAT_ll, PYHAT_ll, PXHATM_ll, PYHATM_ll, PHAT_BOUND, PHATM_BOUND ) IF (LCARTESIAN) THEN CALL SM_GRIDCART(PXHAT,PYHAT,PZHAT,PZS,OSLEVE,PLEN1,PLEN2,PZSMT,PDXHAT,PDYHAT,PZZ,PJ) @@ -517,7 +523,7 @@ END SUBROUTINE INTERP_VERGRID_TO_MASSPOINTS !----------------------------------------------------------------- -SUBROUTINE STORE_GRID_1DIR_BOUNDS( HDIR, PHAT, PHATM, PHAT_BOUND, PHATM_BOUND ) +SUBROUTINE STORE_GRID_1DIR( HDIR, PHAT, PHATM, PHAT_ll, PHATM_ll, PHAT_BOUND, PHATM_BOUND ) USE MODD_GRID_n USE MODD_PARAMETERS, ONLY: JPHEXT, JPVEXT, XNEGUNDEF @@ -531,19 +537,17 @@ SUBROUTINE STORE_GRID_1DIR_BOUNDS( HDIR, PHAT, PHATM, PHAT_BOUND, PHATM_BOUND ) CHARACTER(LEN=1), INTENT(IN) :: HDIR ! Direction ('X', 'Y' or 'Z') REAL, DIMENSION(:), TARGET, INTENT(IN) :: PHAT ! Position x, y or z in the conformal or cartesian plane REAL, DIMENSION(:), TARGET, INTENT(IN) :: PHATM ! id at mass points + REAL, DIMENSION(:), POINTER, INTENT(INOUT) :: PHAT_ll ! Position x, y or z in the conformal or cartesian plane (all domain) + REAL, DIMENSION(:), POINTER, INTENT(INOUT) :: PHATM_ll ! id at mass points REAL, DIMENSION(:), POINTER, INTENT(INOUT) :: PHAT_BOUND ! Boundaries of global domain in the conformal or cartesian plane REAL, DIMENSION(:), POINTER, INTENT(INOUT) :: PHATM_BOUND ! idem at mass points INTEGER :: IERR - LOGICAL :: GALLOC, GALLOCM - REAL, DIMENSION(:), POINTER :: ZHAT_GLOB - REAL, DIMENSION(:), POINTER :: ZHATM_GLOB + LOGICAL :: GALLOC, GALLOCM !Remark: do not deallocate (PHAT_ll/PHATM_ll may be used outside this subroutine) GALLOC = .FALSE. GALLOCM = .FALSE. - ZHAT_GLOB => NULL() - ZHATM_GLOB => NULL() IF ( .NOT. ASSOCIATED( PHAT_BOUND ) ) THEN ALLOCATE( PHAT_BOUND(NHAT_BOUND_SIZE) ) @@ -557,93 +561,112 @@ SUBROUTINE STORE_GRID_1DIR_BOUNDS( HDIR, PHAT, PHATM, PHAT_BOUND, PHATM_BOUND ) SELECT CASE (HDIR) CASE ( 'X' ) - CALL ALLOCBUFFER_ll( ZHAT_GLOB, PHAT, 'XX', GALLOC ) - CALL ALLOCBUFFER_ll( ZHATM_GLOB, PHATM, 'XX', GALLOCM ) - CALL GATHERALL_FIELD_ll( 'XX', PHAT, ZHAT_GLOB, IERR ) - CALL GATHERALL_FIELD_ll( 'XX', PHATM, ZHATM_GLOB, IERR ) + IF ( .NOT. ASSOCIATED( PHAT_ll ) ) THEN + CALL ALLOCBUFFER_ll( PHAT_ll, PHAT, 'XX', GALLOC ) + CALL GATHERALL_FIELD_ll( 'XX', PHAT, PHAT_ll, IERR ) + END IF + IF ( .NOT. ASSOCIATED( PHATM_ll ) ) THEN + CALL ALLOCBUFFER_ll( PHATM_ll, PHATM, 'XX', GALLOCM ) + CALL GATHERALL_FIELD_ll( 'XX', PHATM, PHATM_ll, IERR ) + END IF ! Global boundaries on u points - PHAT_BOUND(NEXTE_XMIN) = ZHAT_GLOB( 1 ) - PHAT_BOUND(NEXTE_XMAX) = ZHAT_GLOB( UBOUND( ZHAT_GLOB, 1 ) ) - PHAT_BOUND(NPHYS_XMIN) = ZHAT_GLOB( JPHEXT + 1 ) - PHAT_BOUND(NPHYS_XMAX) = ZHAT_GLOB( UBOUND( ZHAT_GLOB, 1 ) ) + PHAT_BOUND(NEXTE_XMIN) = PHAT_ll( 1 ) + PHAT_BOUND(NEXTE_XMAX) = PHAT_ll( UBOUND( PHAT_ll, 1 ) ) + PHAT_BOUND(NPHYS_XMIN) = PHAT_ll( JPHEXT + 1 ) + PHAT_BOUND(NPHYS_XMAX) = PHAT_ll( UBOUND( PHAT_ll, 1 ) ) ! Global boundaries on m points - PHATM_BOUND(NEXTE_XMIN) = ZHATM_GLOB( 1 ) - PHATM_BOUND(NEXTE_XMAX) = ZHATM_GLOB( UBOUND( ZHATM_GLOB, 1 ) ) - PHATM_BOUND(NPHYS_XMIN) = ZHATM_GLOB( JPHEXT + 1 ) - PHATM_BOUND(NPHYS_XMAX) = ZHATM_GLOB( UBOUND( ZHATM_GLOB, 1 ) - JPHEXT ) + PHATM_BOUND(NEXTE_XMIN) = PHATM_ll( 1 ) + PHATM_BOUND(NEXTE_XMAX) = PHATM_ll( UBOUND( PHATM_ll, 1 ) ) + PHATM_BOUND(NPHYS_XMIN) = PHATM_ll( JPHEXT + 1 ) + PHATM_BOUND(NPHYS_XMAX) = PHATM_ll( UBOUND( PHATM_ll, 1 ) - JPHEXT ) CASE ( 'Y' ) - CALL ALLOCBUFFER_ll( ZHAT_GLOB, PHAT, 'YY', GALLOC ) - CALL ALLOCBUFFER_ll( ZHATM_GLOB, PHATM, 'YY', GALLOCM ) - CALL GATHERALL_FIELD_ll( 'YY', PHAT, ZHAT_GLOB, IERR ) - CALL GATHERALL_FIELD_ll( 'YY', PHATM, ZHATM_GLOB, IERR ) + IF ( .NOT. ASSOCIATED( PHAT_ll ) ) THEN + CALL ALLOCBUFFER_ll( PHAT_ll, PHAT, 'YY', GALLOC ) + CALL GATHERALL_FIELD_ll( 'YY', PHAT, PHAT_ll, IERR ) + END IF + IF ( .NOT. ASSOCIATED( PHATM_ll ) ) THEN + CALL ALLOCBUFFER_ll( PHATM_ll, PHATM, 'YY', GALLOCM ) + CALL GATHERALL_FIELD_ll( 'YY', PHATM, PHATM_ll, IERR ) + END IF ! Global boundaries on v points - PHAT_BOUND(NEXTE_YMIN) = ZHAT_GLOB( 1 ) - PHAT_BOUND(NEXTE_YMAX) = ZHAT_GLOB( UBOUND( ZHAT_GLOB, 1 ) ) - PHAT_BOUND(NPHYS_YMIN) = ZHAT_GLOB( JPHEXT + 1 ) - PHAT_BOUND(NPHYS_YMAX) = ZHAT_GLOB( UBOUND( ZHAT_GLOB, 1 ) ) + PHAT_BOUND(NEXTE_YMIN) = PHAT_ll( 1 ) + PHAT_BOUND(NEXTE_YMAX) = PHAT_ll( UBOUND( PHAT_ll, 1 ) ) + PHAT_BOUND(NPHYS_YMIN) = PHAT_ll( JPHEXT + 1 ) + PHAT_BOUND(NPHYS_YMAX) = PHAT_ll( UBOUND( PHAT_ll, 1 ) ) ! Global boundaries on m points - PHATM_BOUND(NEXTE_YMIN) = ZHATM_GLOB( 1 ) - PHATM_BOUND(NEXTE_YMAX) = ZHATM_GLOB( UBOUND( ZHATM_GLOB, 1 ) ) - PHATM_BOUND(NPHYS_YMIN) = ZHATM_GLOB( JPHEXT + 1 ) - PHATM_BOUND(NPHYS_YMAX) = ZHATM_GLOB( UBOUND( ZHATM_GLOB, 1 ) - JPHEXT ) + PHATM_BOUND(NEXTE_YMIN) = PHATM_ll( 1 ) + PHATM_BOUND(NEXTE_YMAX) = PHATM_ll( UBOUND( PHATM_ll, 1 ) ) + PHATM_BOUND(NPHYS_YMIN) = PHATM_ll( JPHEXT + 1 ) + PHATM_BOUND(NPHYS_YMAX) = PHATM_ll( UBOUND( PHATM_ll, 1 ) - JPHEXT ) CASE ( 'Z' ) - ZHAT_GLOB => PHAT - ZHATM_GLOB => PHATM + PHAT_ll => PHAT + PHATM_ll => PHATM ! Global boundaries on w points - PHAT_BOUND(NEXTE_ZMIN) = ZHAT_GLOB( 1 ) - PHAT_BOUND(NEXTE_ZMAX) = ZHAT_GLOB( UBOUND( ZHAT_GLOB, 1 ) ) - PHAT_BOUND(NPHYS_ZMIN) = ZHAT_GLOB( JPVEXT + 1 ) - PHAT_BOUND(NPHYS_ZMAX) = ZHAT_GLOB( UBOUND( ZHAT_GLOB, 1 ) ) + PHAT_BOUND(NEXTE_ZMIN) = PHAT_ll( 1 ) + PHAT_BOUND(NEXTE_ZMAX) = PHAT_ll( UBOUND( PHAT_ll, 1 ) ) + PHAT_BOUND(NPHYS_ZMIN) = PHAT_ll( JPVEXT + 1 ) + PHAT_BOUND(NPHYS_ZMAX) = PHAT_ll( UBOUND( PHAT_ll, 1 ) ) ! Global boundaries on m points - PHATM_BOUND(NEXTE_ZMIN) = ZHATM_GLOB( 1 ) - PHATM_BOUND(NEXTE_ZMAX) = ZHATM_GLOB( UBOUND( ZHATM_GLOB, 1 ) ) - PHATM_BOUND(NPHYS_ZMIN) = ZHATM_GLOB( JPVEXT + 1 ) - PHATM_BOUND(NPHYS_ZMAX) = ZHATM_GLOB( UBOUND( ZHATM_GLOB, 1 ) - JPVEXT ) + PHATM_BOUND(NEXTE_ZMIN) = PHATM_ll( 1 ) + PHATM_BOUND(NEXTE_ZMAX) = PHATM_ll( UBOUND( PHATM_ll, 1 ) ) + PHATM_BOUND(NPHYS_ZMIN) = PHATM_ll( JPVEXT + 1 ) + PHATM_BOUND(NPHYS_ZMAX) = PHATM_ll( UBOUND( PHATM_ll, 1 ) - JPVEXT ) CASE DEFAULT - CALL PRINT_MSG( NVERB_ERROR, 'GEN', 'STORE_GRID_1DIR_BOUNDS', 'invalid direction (valid: X, Y or Z)' ) + CALL PRINT_MSG( NVERB_ERROR, 'GEN', 'STORE_GRID_1DIR', 'invalid direction (valid: X, Y or Z)' ) END SELECT - IF ( GALLOC ) DEALLOCATE( ZHAT_GLOB ) - IF ( GALLOCM ) DEALLOCATE( ZHATM_GLOB ) - -END SUBROUTINE STORE_GRID_1DIR_BOUNDS +END SUBROUTINE STORE_GRID_1DIR !----------------------------------------------------------------- !----------------------------------------------------------------- -SUBROUTINE STORE_GRID_BOUNDS( PXHAT, PYHAT, PZHAT, PXHATM, PYHATM, PZHATM, PHAT_BOUND, PHATM_BOUND ) +SUBROUTINE STORE_GLOB_GRID( PXHAT, PYHAT, PZHAT, PXHATM, PYHATM, PZHATM, & + PXHAT_ll, PYHAT_ll, PXHATM_ll, PYHATM_ll, PHAT_BOUND, PHATM_BOUND ) IMPLICIT NONE - REAL, DIMENSION(:), INTENT(IN) :: PXHAT ! Position x in the conformal or cartesian plane - REAL, DIMENSION(:), INTENT(IN) :: PYHAT ! Position y in the conformal or cartesian plane - REAL, DIMENSION(:), INTENT(IN) :: PZHAT ! Position y in the conformal or cartesian plane - REAL, DIMENSION(:), INTENT(IN) :: PXHATM ! idem at mass points - REAL, DIMENSION(:), INTENT(IN) :: PYHATM ! idem at mass points - REAL, DIMENSION(:), INTENT(IN) :: PZHATM ! idem at mass points + REAL, DIMENSION(:), INTENT(IN) :: PXHAT ! Position x in the conformal or cartesian plane + REAL, DIMENSION(:), INTENT(IN) :: PYHAT ! Position y in the conformal or cartesian plane + REAL, DIMENSION(:), INTENT(IN) :: PZHAT ! Position y in the conformal or cartesian plane + REAL, DIMENSION(:), INTENT(IN) :: PXHATM ! idem at mass points + REAL, DIMENSION(:), INTENT(IN) :: PYHATM ! idem at mass points + REAL, DIMENSION(:), INTENT(IN) :: PZHATM ! idem at mass points + REAL, DIMENSION(:), POINTER, INTENT(INOUT) :: PXHAT_ll ! Position x, y or z in the conformal or cartesian plane (all domain) + REAL, DIMENSION(:), POINTER, INTENT(INOUT) :: PYHAT_ll ! Position x, y or z in the conformal or cartesian plane (all domain) + REAL, DIMENSION(:), POINTER, INTENT(INOUT) :: PXHATM_ll ! id at mass points + REAL, DIMENSION(:), POINTER, INTENT(INOUT) :: PYHATM_ll ! id at mass points REAL, DIMENSION(:), POINTER, INTENT(INOUT) :: PHAT_BOUND ! Boundaries of global domain in the conformal or cartesian plane REAL, DIMENSION(:), POINTER, INTENT(INOUT) :: PHATM_BOUND ! idem at mass points - CALL STORE_GRID_1DIR_BOUNDS( 'X', PXHAT, PXHATM, PHAT_BOUND, PHATM_BOUND ) - CALL STORE_GRID_1DIR_BOUNDS( 'Y', PYHAT, PYHATM, PHAT_BOUND, PHATM_BOUND ) - CALL STORE_GRID_1DIR_BOUNDS( 'Z', PZHAT, PZHATM, PHAT_BOUND, PHATM_BOUND ) + REAL, DIMENSION(:), POINTER :: PZHAT_DUMMY_ll + REAL, DIMENSION(:), POINTER :: PZHATM_DUMMY_ll -END SUBROUTINE STORE_GRID_BOUNDS + PZHAT_DUMMY_ll => NULL() + PZHATM_DUMMY_ll => NULL() + + CALL STORE_GLOB_HORGRID( PXHAT, PYHAT, PXHATM, PYHATM, PXHAT_ll, PYHAT_ll, PXHATM_ll, PYHATM_ll, PHAT_BOUND, PHATM_BOUND ) + CALL STORE_GLOB_VERGRID( PZHAT, PZHATM, PHAT_BOUND, PHATM_BOUND ) + + PZHAT_DUMMY_ll => NULL() + PZHATM_DUMMY_ll => NULL() + +END SUBROUTINE STORE_GLOB_GRID !----------------------------------------------------------------- !----------------------------------------------------------------- -SUBROUTINE STORE_HORGRID_BOUNDS( PXHAT, PYHAT, PXHATM, PYHATM, PHAT_BOUND, PHATM_BOUND ) +SUBROUTINE STORE_GLOB_HORGRID( PXHAT, PYHAT, PXHATM, PYHATM, & + PXHAT_ll, PYHAT_ll, PXHATM_ll, PYHATM_ll, PHAT_BOUND, PHATM_BOUND ) IMPLICIT NONE @@ -651,18 +674,22 @@ SUBROUTINE STORE_HORGRID_BOUNDS( PXHAT, PYHAT, PXHATM, PYHATM, PHAT_BOUND, PHATM REAL, DIMENSION(:), INTENT(IN) :: PYHAT ! Position y in the conformal or cartesian plane REAL, DIMENSION(:), INTENT(IN) :: PXHATM ! idem at mass points REAL, DIMENSION(:), INTENT(IN) :: PYHATM ! idem at mass points + REAL, DIMENSION(:), POINTER, INTENT(INOUT) :: PXHAT_ll ! Position x, y or z in the conformal or cartesian plane (all domain) + REAL, DIMENSION(:), POINTER, INTENT(INOUT) :: PYHAT_ll ! Position x, y or z in the conformal or cartesian plane (all domain) + REAL, DIMENSION(:), POINTER, INTENT(INOUT) :: PXHATM_ll ! id at mass points + REAL, DIMENSION(:), POINTER, INTENT(INOUT) :: PYHATM_ll ! id at mass points REAL, DIMENSION(:), POINTER, INTENT(INOUT) :: PHAT_BOUND ! Boundaries of global domain in the conformal or cartesian plane REAL, DIMENSION(:), POINTER, INTENT(INOUT) :: PHATM_BOUND ! idem at mass points - CALL STORE_GRID_1DIR_BOUNDS( 'X', PXHAT, PXHATM, PHAT_BOUND, PHATM_BOUND ) - CALL STORE_GRID_1DIR_BOUNDS( 'Y', PYHAT, PYHATM, PHAT_BOUND, PHATM_BOUND ) + CALL STORE_GRID_1DIR( 'X', PXHAT, PXHATM, PXHAT_ll, PXHATM_ll, PHAT_BOUND, PHATM_BOUND ) + CALL STORE_GRID_1DIR( 'Y', PYHAT, PYHATM, PYHAT_ll, PYHATM_ll, PHAT_BOUND, PHATM_BOUND ) -END SUBROUTINE STORE_HORGRID_BOUNDS +END SUBROUTINE STORE_GLOB_HORGRID !----------------------------------------------------------------- !----------------------------------------------------------------- -SUBROUTINE STORE_VERGRID_BOUNDS( PZHAT, PZHATM, PHAT_BOUND, PHATM_BOUND ) +SUBROUTINE STORE_GLOB_VERGRID( PZHAT, PZHATM, PHAT_BOUND, PHATM_BOUND ) IMPLICIT NONE @@ -671,9 +698,18 @@ SUBROUTINE STORE_VERGRID_BOUNDS( PZHAT, PZHATM, PHAT_BOUND, PHATM_BOUND ) REAL, DIMENSION(:), POINTER, INTENT(INOUT) :: PHAT_BOUND ! Boundaries of global domain in the conformal or cartesian plane REAL, DIMENSION(:), POINTER, INTENT(INOUT) :: PHATM_BOUND ! idem at mass points - CALL STORE_GRID_1DIR_BOUNDS( 'Z', PZHAT, PZHATM, PHAT_BOUND, PHATM_BOUND ) + REAL, DIMENSION(:), POINTER :: PZHAT_DUMMY_ll + REAL, DIMENSION(:), POINTER :: PZHATM_DUMMY_ll + + PZHAT_DUMMY_ll => NULL() + PZHATM_DUMMY_ll => NULL() + + CALL STORE_GRID_1DIR( 'Z', PZHAT, PZHATM, PZHAT_DUMMY_ll, PZHATM_DUMMY_ll, PHAT_BOUND, PHATM_BOUND ) + + PZHAT_DUMMY_ll => NULL() + PZHATM_DUMMY_ll => NULL() -END SUBROUTINE STORE_VERGRID_BOUNDS +END SUBROUTINE STORE_GLOB_VERGRID !----------------------------------------------------------------- diff --git a/src/MNH/set_perturb.f90 b/src/MNH/set_perturb.f90 index 7e9e43687..7c4ea5e2e 100644 --- a/src/MNH/set_perturb.f90 +++ b/src/MNH/set_perturb.f90 @@ -164,10 +164,6 @@ REAL,DIMENSION(:,:),ALLOCATABLE :: ZCY_ll,ZSY_ll ! and y directions REAL, DIMENSION(SIZE(XXHAT),SIZE(XYHAT),SIZE(XZHAT)) :: ZT ! temperature REAL, DIMENSION(SIZE(XXHAT),SIZE(XYHAT),SIZE(XZHAT)) :: ZHU ! rel. humidity ! -REAL, DIMENSION(:), ALLOCATABLE :: ZXHAT_ll ! Position x in the conformal - ! plane (array on the complete domain) -REAL, DIMENSION(:), ALLOCATABLE :: ZYHAT_ll ! Position y in the conformal - ! plane (array on the complete domain) INTEGER :: IIU_ll,IJU_ll ! horizontal,vertical size of the extended global domain INTEGER :: IIB_ll,IJB_ll ! global coordinate of the physical global domain INTEGER :: IIE_ll,IJE_ll ! @@ -241,9 +237,6 @@ IJE=IJU-JPHEXT ! IIU_ll=NIMAX_ll+2*JPHEXT IJU_ll=NJMAX_ll+2*JPHEXT -ALLOCATE(ZXHAT_ll(IIU_ll),ZYHAT_ll(IJU_ll)) -CALL GATHERALL_FIELD_ll('XX',XXHAT,ZXHAT_ll,IRESP) -CALL GATHERALL_FIELD_ll('YY',XYHAT,ZYHAT_ll,IRESP) ! CALL GET_INDICE_ll (IIB,IJB,IIE,IJE) IIB_ll=1+JPHEXT @@ -269,8 +262,8 @@ SELECT CASE(CPERT_KIND) CASE('TH') ZDIST(:,:,:) = 2. ! C grid shift - ZCENTERX=(ZXHAT_ll(2)+ZXHAT_ll(IIU_ll))*0.5 - ZCENTERY=(ZYHAT_ll(2)+ZYHAT_ll(IJU_ll))*0.5 + ZCENTERX=(XXHAT_ll(2)+XXHAT_ll(IIU_ll))*0.5 + ZCENTERY=(XYHAT_ll(2)+XYHAT_ll(IJU_ll))*0.5 ! DO JK =IKB,IKE DO JJ = IJB,IJE @@ -339,8 +332,8 @@ SELECT CASE(CPERT_KIND) ! DO JI = 1,IIU_ll DO JJ = 1,IJU_ll - ZPHI_ll(JI,JJ) = XAMPLIUV*EXP(-((ZYHAT_ll(JJ)-ZYHAT_ll(IJ0))/XRADY)**2) & - * COS(2.*XPI/XRADX*ZXHAT_ll(JI)) + ZPHI_ll(JI,JJ) = XAMPLIUV*EXP(-((XYHAT_ll(JJ)-XYHAT_ll(IJ0))/XRADY)**2) & + * COS(2.*XPI/XRADX*XXHAT_ll(JI)) END DO END DO ! @@ -348,8 +341,8 @@ SELECT CASE(CPERT_KIND) ! DO JI = 1,IIU_ll DO JJ = IJMIN,IJMAX - ZPU_ll(JI,JJ) = (ZPHI_ll(JI,JJ+1)-ZPHI_ll(JI,JJ)) / (-ZYHAT_ll(JJ+1)+ZYHAT_ll(JJ) ) - ZPV_ll(JI,JJ) = (ZPHI_ll(JI+1,JJ)-ZPHI_ll(JI,JJ)) / ( ZXHAT_ll(JI+1)-ZXHAT_ll(JI) ) + ZPU_ll(JI,JJ) = (ZPHI_ll(JI,JJ+1)-ZPHI_ll(JI,JJ)) / (-XYHAT_ll(JJ+1)+XYHAT_ll(JJ) ) + ZPV_ll(JI,JJ) = (ZPHI_ll(JI+1,JJ)-ZPHI_ll(JI,JJ)) / ( XXHAT_ll(JI+1)-XXHAT_ll(JI) ) END DO END DO ! @@ -558,8 +551,6 @@ SELECT CASE(CPERT_KIND) ! END SELECT ! -DEALLOCATE(ZXHAT_ll,ZYHAT_ll) -! !------------------------------------------------------------------------------- ! END SUBROUTINE SET_PERTURB diff --git a/src/MNH/spawn_grid2.f90 b/src/MNH/spawn_grid2.f90 index 332519faa..8521be04d 100644 --- a/src/MNH/spawn_grid2.f90 +++ b/src/MNH/spawn_grid2.f90 @@ -11,6 +11,7 @@ INTERFACE ! SUBROUTINE SPAWN_GRID2( KXOR, KYOR, KXEND, KYEND, KDXRATIO, KDYRATIO, & PLONOR, PLATOR, PXHAT, PYHAT, PZHAT, PXHATM, PYHATM, PZHATM, & + PXHAT_ll, PYHAT_ll, PXHATM_ll, PYHATM_ll, & PHAT_BOUND, PHATM_BOUND, & PZTOP, OSLEVE, PLEN1, PLEN2, & PZS, PZSMT, PZS_LS, PZSMT_LS, & @@ -30,6 +31,10 @@ REAL, DIMENSION(:), INTENT(OUT) :: PXHAT,PYHAT,PZHAT ! positions x,y,z in the ! conformal plane or on the cartesian plane REAL, DIMENSION(:), INTENT(OUT) :: PXHATM, PYHATM, PZHATM ! positions x,y in the ! conformal plane or on the cartesian plane at mass points +REAL, DIMENSION(:), POINTER, INTENT(INOUT) :: PXHAT_ll ! Position x, y or z in the conformal or cartesian plane (all domain) +REAL, DIMENSION(:), POINTER, INTENT(INOUT) :: PYHAT_ll ! Position x, y or z in the conformal or cartesian plane (all domain) +REAL, DIMENSION(:), POINTER, INTENT(INOUT) :: PXHATM_ll ! id at mass points +REAL, DIMENSION(:), POINTER, INTENT(INOUT) :: PYHATM_ll ! id at mass points REAL, DIMENSION(:), POINTER, INTENT(INOUT) :: PHAT_BOUND ! Boundaries of global domain in the conformal or cartesian plane REAL, DIMENSION(:), POINTER, INTENT(INOUT) :: PHATM_BOUND ! idem at mass points REAL, INTENT(OUT) :: PZTOP ! model top (m) @@ -54,6 +59,7 @@ END MODULE MODI_SPAWN_GRID2 ! ###################################################################################### SUBROUTINE SPAWN_GRID2( KXOR, KYOR, KXEND, KYEND, KDXRATIO, KDYRATIO, & PLONOR, PLATOR, PXHAT, PYHAT, PZHAT, PXHATM, PYHATM, PZHATM, & + PXHAT_ll, PYHAT_ll, PXHATM_ll, PYHATM_ll, & PHAT_BOUND, PHATM_BOUND, & PZTOP, OSLEVE, PLEN1, PLEN2, & PZS, PZSMT, PZS_LS, PZSMT_LS, & @@ -171,7 +177,7 @@ USE MODD_BIKHARDT_n USE MODD_VAR_ll use mode_bikhardt USE MODE_ll -USE MODE_SET_GRID, only: INTERP_HORGRID_TO_MASSPOINTS, STORE_GRID_BOUNDS +USE MODE_SET_GRID, only: INTERP_HORGRID_TO_MASSPOINTS, STORE_GLOB_GRID USE MODE_TIME USE MODE_GRIDPROJ ! @@ -196,6 +202,10 @@ REAL, DIMENSION(:), INTENT(OUT) :: PXHAT,PYHAT,PZHAT ! positions x,y,z in the ! conformal plane or on the cartesian plane REAL, DIMENSION(:), INTENT(OUT) :: PXHATM, PYHATM, PZHATM ! positions x,y in the ! conformal plane or on the cartesian plane at mass points +REAL, DIMENSION(:), POINTER, INTENT(INOUT) :: PXHAT_ll ! Position x, y or z in the conformal or cartesian plane (all domain) +REAL, DIMENSION(:), POINTER, INTENT(INOUT) :: PYHAT_ll ! Position x, y or z in the conformal or cartesian plane (all domain) +REAL, DIMENSION(:), POINTER, INTENT(INOUT) :: PXHATM_ll ! id at mass points +REAL, DIMENSION(:), POINTER, INTENT(INOUT) :: PYHATM_ll ! id at mass points REAL, DIMENSION(:), POINTER, INTENT(INOUT) :: PHAT_BOUND ! Boundaries of global domain in the conformal or cartesian plane REAL, DIMENSION(:), POINTER, INTENT(INOUT) :: PHATM_BOUND ! idem at mass points REAL, INTENT(OUT) :: PZTOP ! model top (m) @@ -464,7 +474,8 @@ PLEN2 = XLEN21 CALL INTERP_HORGRID_TO_MASSPOINTS( PXHAT, PYHAT, PXHATM, PYHATM ) ! Collect global domain boundaries - CALL STORE_GRID_BOUNDS( PXHAT, PYHAT, PZHAT, PXHATM, PYHATM, PZHATM, PHAT_BOUND, PHATM_BOUND ) + CALL STORE_GLOB_GRID( PXHAT, PYHAT, PZHAT, PXHATM, PYHATM, PZHATM, & + PXHAT_ll, PYHAT_ll, PXHATM_ll, PYHATM_ll, PHAT_BOUND, PHATM_BOUND ) !!$======= !!$ IXSIZE1=SIZE(XXHAT1) diff --git a/src/MNH/spawn_model2.f90 b/src/MNH/spawn_model2.f90 index fe3baed67..85a2ed746 100644 --- a/src/MNH/spawn_model2.f90 +++ b/src/MNH/spawn_model2.f90 @@ -1061,6 +1061,7 @@ ENDIF XZS=0. CALL SPAWN_GRID2( NXOR, NYOR, NXEND, NYEND, NDXRATIO, NDYRATIO, & XLONORI, XLATORI, XXHAT, XYHAT, XZHAT, XXHATM, XYHATM, XZHATM, & + XXHAT_ll, XYHAT_ll, XXHATM_ll, XYHATM_ll, & XHAT_BOUND, XHATM_BOUND, & XZTOP, LSLEVE, XLEN1, XLEN2, & XZS, XZSMT, ZZS_LS, ZZSMT_LS, TDTMOD, TDTCUR ) diff --git a/src/MNH/surf_solar_shadows.f90 b/src/MNH/surf_solar_shadows.f90 index 0a3eaabb7..7d13e34b0 100644 --- a/src/MNH/surf_solar_shadows.f90 +++ b/src/MNH/surf_solar_shadows.f90 @@ -76,13 +76,14 @@ END MODULE MODI_SURF_SOLAR_SHADOWS !* 0. DECLARATIONS ! ------------ ! -USE MODE_ll ! -USE MODD_PARAMETERS, ONLY : XUNDEF, JPHEXT -USE MODD_CST, ONLY : XPI, XRADIUS USE MODD_CONF, ONLY : LCARTESIAN -USE MODD_SHADOWS_n, ONLY : XZS_ll, XZS_XY_ll, XXHAT_ll, & - XYHAT_ll, XZS_MAX_ll, XZS_MAX_ll +USE MODD_CST, ONLY : XPI, XRADIUS +USE MODD_GRID_n, ONLY : XXHAT_ll, XYHAT_ll +USE MODD_PARAMETERS, ONLY : XUNDEF, JPHEXT +USE MODD_SHADOWS_n, ONLY : XZS_ll, XZS_XY_ll, XZS_MAX_ll, XZS_MAX_ll +! +USE MODE_ll ! IMPLICIT NONE ! diff --git a/src/MNH/turb_ver_thermo_flux.f90 b/src/MNH/turb_ver_thermo_flux.f90 index 596d78c00..0febd151f 100644 --- a/src/MNH/turb_ver_thermo_flux.f90 +++ b/src/MNH/turb_ver_thermo_flux.f90 @@ -372,7 +372,6 @@ USE MODE_PRANDTL ! USE MODI_SECOND_MNH USE MODE_ll -USE MODE_GATHER_ll ! IMPLICIT NONE ! @@ -494,12 +493,6 @@ INTEGER :: IIB,IJB ! Lower bounds of the physical INTEGER :: IIE,IJE ! Upper bounds of the physical ! sub-domain in x and y directions ! -REAL, DIMENSION(:), ALLOCATABLE :: ZXHAT_ll ! Position x in the conformal - ! plane (array on the complete domain) -REAL, DIMENSION(:), ALLOCATABLE :: ZYHAT_ll ! Position y in the conformal - ! plane (array on the complete domain) -! -! CHARACTER (LEN=100) :: YCOMMENT ! comment string in LFIFM file CHARACTER (LEN=LEN_HREC) :: YRECFM ! Name of the desired field in LFIFM file ! @@ -535,12 +528,6 @@ IJU=SIZE(PTHLM,2) ! IF (LOCEAN .AND. LDEEPOC) THEN !* COMPUTES THE PHYSICAL SUBDOMAIN BOUNDS - ALLOCATE(ZXHAT_ll(NIMAX_ll+2*JPHEXT),ZYHAT_ll(NJMAX_ll+2*JPHEXT)) - !compute ZXHAT_ll = position in the (0:Lx) domain 1 (Lx=Size of domain1 ) - !compute XXHAT_ll = position in the (L0_subproc,Lx_subproc) domain for the current subproc - ! L0_subproc as referenced in the full domain 1 - CALL GATHERALL_FIELD_ll('XX',XXHAT,ZXHAT_ll,IRESP) - CALL GATHERALL_FIELD_ll('YY',XYHAT,ZYHAT_ll,IRESP) CALL GET_DIM_EXT_ll('B',IIU,IJU) CALL GET_INDICE_ll(IIB,IJB,IIE,IJE) DO JJ = IJB,IJE @@ -1103,9 +1090,6 @@ IF ( ((OTURB_FLX .AND. tpfile%lopened) .OR. LLES_CALL) .AND. (KRRL > 0) ) THEN END IF ! END IF !end of <w Rc> -IF (LOCEAN.AND.LDEEPOC) THEN - DEALLOCATE(ZXHAT_ll,ZYHAT_ll) -END IF ! !---------------------------------------------------------------------------- END SUBROUTINE TURB_VER_THERMO_FLUX -- GitLab