diff --git a/src/MNH/ini_posprofilern.f90 b/src/MNH/ini_posprofilern.f90 index 966c343cf93cf3cc28790b6ac2926a90754a1434..674dab0d8b87fa1096fce764af6ff069161da646 100644 --- a/src/MNH/ini_posprofilern.f90 +++ b/src/MNH/ini_posprofilern.f90 @@ -62,13 +62,9 @@ USE MODD_ALLPROFILER_n USE MODD_CONF, ONLY: LCARTESIAN USE MODD_DYN, ONLY: XSEGLEN USE MODD_DYN_n, ONLY: DYN_MODEL, XTSTEP -USE MODD_GRID_n, ONLY: XXHAT, XXHATM, XYHAT, XYHATM -USE MODD_PARAMETERS, ONLY: JPHEXT, JPVEXT USE MODD_PROFILER_n, ONLY: LPROFILER, NUMBPROFILER_LOC, TPROFILERS, TPROFILERS_TIME USE MODD_TYPE_STATPROF, ONLY: TPROFILERDATA -USE MODE_ALLOCBUFFER_ll, ONLY: ALLOCBUFFER_ll -USE MODE_GATHER_ll, ONLY: GATHERALL_FIELD_ll USE MODE_MSG USE MODE_STATPROF_READER, ONLY: STATPROF_CSV_READ USE MODE_STATPROF_TOOLS, ONLY: PROFILER_ADD, PROFILER_ALLOCATE, STATPROF_INI_INTERP, STATPROF_POSITION @@ -84,19 +80,11 @@ IMPLICIT NONE ! ! 0.2 declaration of local variables ! -INTEGER :: IERR -INTEGER :: IIU -INTEGER :: IJU INTEGER :: INUMBPROF ! Total number of profilers (inside physical domain of model) INTEGER :: ISTORE ! number of storage instants INTEGER :: JI -LOGICAL :: GALLOCX, GALLOCY LOGICAL :: GINSIDE ! True if profiler is inside physical domain of model LOGICAL :: GPRESENT ! True if profiler is present on the current process -REAL :: ZXHATM_PHYS_MIN, ZYHATM_PHYS_MIN ! Minimum X coordinate of mass points in the physical domain -REAL :: ZXHATM_PHYS_MAX, ZYHATM_PHYS_MAX ! Minimum X coordinate of mass points in the physical domain -REAL, DIMENSION(:), POINTER :: ZXHAT_GLOB -REAL, DIMENSION(:), POINTER :: ZYHAT_GLOB TYPE(TPROFILERDATA) :: TZPROFILER ! !---------------------------------------------------------------------------- @@ -112,24 +100,6 @@ ISTORE = NINT ( ( XSEGLEN - DYN_MODEL(1)%XTSTEP ) / TPROFILERS_TIME%XTSTEP ) + 1 allocate( tprofilers_time%tpdates(istore) ) ! -! Prepare positioning data -! -IF ( CFILE_PROF /= "NO_INPUT_CSV" .OR. NNUMB_PROF > 0 ) THEN - IIU = SIZE( XXHAT ) - IJU = SIZE( XYHAT ) - - ! Get global XHAT and YHAT (needed by PROFILER_POSITION) - CALL ALLOCBUFFER_ll( ZXHAT_GLOB, XXHAT, 'XX', GALLOCX ) - CALL ALLOCBUFFER_ll( ZYHAT_GLOB, XYHAT, 'YY', GALLOCY ) - CALL GATHERALL_FIELD_ll( 'XX', XXHAT, ZXHAT_GLOB, IERR ) - CALL GATHERALL_FIELD_ll( 'YY', XYHAT, ZYHAT_GLOB, IERR ) - - ZXHATM_PHYS_MIN = 0.5 * ( ZXHAT_GLOB(1+JPHEXT) + ZXHAT_GLOB(2+JPHEXT) ) - ZXHATM_PHYS_MAX = 0.5 * ( ZXHAT_GLOB(UBOUND(ZXHAT_GLOB,1)-JPHEXT) + ZXHAT_GLOB(UBOUND(ZXHAT_GLOB,1)-JPHEXT+1) ) - ZYHATM_PHYS_MIN = 0.5 * ( ZYHAT_GLOB(1+JPHEXT) + ZYHAT_GLOB(2+JPHEXT) ) - ZYHATM_PHYS_MAX = 0.5 * ( ZYHAT_GLOB(UBOUND(ZYHAT_GLOB,1)-JPHEXT) + ZYHAT_GLOB(UBOUND(ZYHAT_GLOB,1)-JPHEXT+1) ) -END IF -! ! Profilers initialization ! NUMBPROFILER_LOC = 0 @@ -150,9 +120,7 @@ IF (CFILE_PROF=="NO_INPUT_CSV") THEN TZPROFILER%XZ = XZ_PROF(JI) TZPROFILER%CNAME = CNAME_PROF(JI) - CALL STATPROF_POSITION( TZPROFILER, ZXHAT_GLOB, ZYHAT_GLOB, XXHATM, XYHATM, & - ZXHATM_PHYS_MIN, ZXHATM_PHYS_MAX, ZYHATM_PHYS_MIN, ZYHATM_PHYS_MAX, & - GINSIDE, GPRESENT ) + CALL STATPROF_POSITION( TZPROFILER, GINSIDE, GPRESENT ) IF ( GINSIDE ) THEN INUMBPROF = INUMBPROF + 1 @@ -164,9 +132,7 @@ IF (CFILE_PROF=="NO_INPUT_CSV") THEN END IF ELSE !Treat CSV datafile - CALL STATPROF_CSV_READ( TZPROFILER, CFILE_PROF, ZXHAT_GLOB, ZYHAT_GLOB, XXHATM, XYHATM, & - ZXHATM_PHYS_MIN, ZXHATM_PHYS_MAX,ZYHATM_PHYS_MIN, ZYHATM_PHYS_MAX, & - INUMBPROF ) + CALL STATPROF_CSV_READ( TZPROFILER, CFILE_PROF, INUMBPROF ) END IF LPROFILER = ( INUMBPROF > 0 ) @@ -174,13 +140,6 @@ LPROFILER = ( INUMBPROF > 0 ) DO JI = 1, NUMBPROFILER_LOC CALL PROFILER_ALLOCATE( TPROFILERS(JI), ISTORE ) END DO -! -! Clean positioning data -! -IF ( CFILE_PROF /= "NO_INPUT_CSV" .OR. NNUMB_PROF > 0 ) THEN - IF ( GALLOCX ) DEALLOCATE( ZXHAT_GLOB ) - IF ( GALLOCY ) DEALLOCATE( ZYHAT_GLOB ) -END IF !---------------------------------------------------------------------------- ! END SUBROUTINE INI_POSPROFILER_n diff --git a/src/MNH/ini_surfstationn.f90 b/src/MNH/ini_surfstationn.f90 index 94332d77c09dcd643ea5da119bf0e1bf37ff1943..c312cf819c8b45e50ab9d98bc5f955d4ab07c064 100644 --- a/src/MNH/ini_surfstationn.f90 +++ b/src/MNH/ini_surfstationn.f90 @@ -63,13 +63,9 @@ USE MODD_ALLSTATION_n USE MODD_CONF, ONLY: LCARTESIAN USE MODD_DYN, ONLY: XSEGLEN USE MODD_DYN_n, ONLY: DYN_MODEL, XTSTEP -USE MODD_GRID_n, ONLY: XXHAT, XXHATM, XYHAT, XYHATM -USE MODD_PARAMETERS, ONLY: JPHEXT, JPVEXT USE MODD_STATION_n USE MODD_TYPE_STATPROF ! -USE MODE_ALLOCBUFFER_ll, ONLY: ALLOCBUFFER_ll -USE MODE_GATHER_ll, ONLY: GATHERALL_FIELD_ll USE MODE_MSG USE MODE_STATPROF_READER, ONLY: STATPROF_CSV_READ USE MODE_STATPROF_TOOLS, ONLY: STATION_ADD, STATION_ALLOCATE, STATPROF_INI_INTERP, STATPROF_POSITION @@ -85,19 +81,11 @@ IMPLICIT NONE ! ! 0.2 declaration of local variables ! -INTEGER :: IERR -INTEGER :: IIU -INTEGER :: IJU INTEGER :: INUMBSTAT ! Total number of stations (inside physical domain of model) INTEGER :: ISTORE ! number of storage instants INTEGER :: JI -LOGICAL :: GALLOCX, GALLOCY LOGICAL :: GINSIDE ! True if station is inside physical domain of model LOGICAL :: GPRESENT ! True if station is present on the current process -REAL :: ZXHATM_PHYS_MIN, ZYHATM_PHYS_MIN ! Minimum X coordinate of mass points in the physical domain -REAL :: ZXHATM_PHYS_MAX, ZYHATM_PHYS_MAX ! Minimum X coordinate of mass points in the physical domain -REAL, DIMENSION(:), POINTER :: ZXHAT_GLOB -REAL, DIMENSION(:), POINTER :: ZYHAT_GLOB TYPE(TSTATIONDATA) :: TZSTATION ! !---------------------------------------------------------------------------- @@ -113,24 +101,6 @@ ISTORE = NINT ( ( XSEGLEN - DYN_MODEL(1)%XTSTEP ) / TSTATIONS_TIME%XTSTEP ) + 1 allocate( tstations_time%tpdates(istore) ) ! -! Prepare positioning data -! -IF ( CFILE_STAT /= "NO_INPUT_CSV" .OR. NNUMB_STAT > 0 ) THEN - IIU = SIZE( XXHAT ) - IJU = SIZE( XYHAT ) - - ! Get global XHAT and YHAT (needed by STATPROF_POSITION) - CALL ALLOCBUFFER_ll( ZXHAT_GLOB, XXHAT, 'XX', GALLOCX ) - CALL ALLOCBUFFER_ll( ZYHAT_GLOB, XYHAT, 'YY', GALLOCY ) - CALL GATHERALL_FIELD_ll( 'XX', XXHAT, ZXHAT_GLOB, IERR ) - CALL GATHERALL_FIELD_ll( 'YY', XYHAT, ZYHAT_GLOB, IERR ) - - ZXHATM_PHYS_MIN = 0.5 * ( ZXHAT_GLOB(1+JPHEXT) + ZXHAT_GLOB(2+JPHEXT) ) - ZXHATM_PHYS_MAX = 0.5 * ( ZXHAT_GLOB(UBOUND(ZXHAT_GLOB,1)-JPHEXT) + ZXHAT_GLOB(UBOUND(ZXHAT_GLOB,1)-JPHEXT+1) ) - ZYHATM_PHYS_MIN = 0.5 * ( ZYHAT_GLOB(1+JPHEXT) + ZYHAT_GLOB(2+JPHEXT) ) - ZYHATM_PHYS_MAX = 0.5 * ( ZYHAT_GLOB(UBOUND(ZYHAT_GLOB,1)-JPHEXT) + ZYHAT_GLOB(UBOUND(ZYHAT_GLOB,1)-JPHEXT+1) ) -END IF -! ! Stations initialization ! NUMBSTAT_LOC = 0 @@ -151,9 +121,7 @@ IF (CFILE_STAT=="NO_INPUT_CSV") THEN TZSTATION%XZ = XZ_STAT(JI) TZSTATION%CNAME = CNAME_STAT(JI) - CALL STATPROF_POSITION( TZSTATION, ZXHAT_GLOB, ZYHAT_GLOB, XXHATM, XYHATM, & - ZXHATM_PHYS_MIN, ZXHATM_PHYS_MAX, ZYHATM_PHYS_MIN, ZYHATM_PHYS_MAX, & - GINSIDE, GPRESENT ) + CALL STATPROF_POSITION( TZSTATION, GINSIDE, GPRESENT ) IF ( GINSIDE ) THEN INUMBSTAT = INUMBSTAT + 1 @@ -165,9 +133,7 @@ IF (CFILE_STAT=="NO_INPUT_CSV") THEN END IF ELSE !Treat CSV datafile - CALL STATPROF_CSV_READ( TZSTATION, CFILE_STAT, ZXHAT_GLOB, ZYHAT_GLOB, XXHATM, XYHATM, & - ZXHATM_PHYS_MIN, ZXHATM_PHYS_MAX,ZYHATM_PHYS_MIN, ZYHATM_PHYS_MAX, & - INUMBSTAT ) + CALL STATPROF_CSV_READ( TZSTATION, CFILE_STAT, INUMBSTAT ) END IF LSTATION = ( INUMBSTAT > 0 ) @@ -175,13 +141,6 @@ LSTATION = ( INUMBSTAT > 0 ) DO JI = 1, NUMBSTAT_LOC CALL STATION_ALLOCATE( TSTATIONS(JI), ISTORE ) END DO -! -! Clean positioning data -! -IF ( CFILE_STAT /= "NO_INPUT_CSV" .OR. NNUMB_STAT > 0 ) THEN - IF ( GALLOCX ) DEALLOCATE( ZXHAT_GLOB ) - IF ( GALLOCY ) DEALLOCATE( ZYHAT_GLOB ) -END IF !---------------------------------------------------------------------------- diff --git a/src/MNH/statprof_reader.f90 b/src/MNH/statprof_reader.f90 index 92eb1917fd9dda25ed11b923c2fa7b878660e0bb..be9c3d2e269800071670b5c4795e56745290e133 100644 --- a/src/MNH/statprof_reader.f90 +++ b/src/MNH/statprof_reader.f90 @@ -34,11 +34,9 @@ CONTAINS ! P. Wautelet 04/2022: restructure stations/profilers for better performance, reduce memory usage and correct some problems/bugs !--------------------------------------------------------------- ! -!################################################################################################# -SUBROUTINE STATPROF_CSV_READ( TPSTATPROF, HFILE, PXHAT_GLOB, PYHAT_GLOB, PXHATM, PYHATM, & - PXHATM_PHYS_MIN, PXHATM_PHYS_MAX,PYHATM_PHYS_MIN, PYHATM_PHYS_MAX, & - KNUMBSTATPROF ) -!################################################################################################# +!############################################################### +SUBROUTINE STATPROF_CSV_READ( TPSTATPROF, HFILE, KNUMBSTATPROF ) +!############################################################### USE MODD_CONF, ONLY: LCARTESIAN USE MODD_TYPE_STATPROF, ONLY: TPROFILERDATA, TSTATIONDATA, TSTATPROFDATA @@ -48,18 +46,11 @@ USE MODE_STATPROF_TOOLS, ONLY: PROFILER_ADD, STATION_ADD, STATPROF_INI_INTERP, S CLASS(TSTATPROFDATA), INTENT(IN) :: TPSTATPROF ! Used only to identify datatype CHARACTER(LEN=*), INTENT(IN) :: HFILE ! file to read -REAL, DIMENSION(:), INTENT(IN) :: PXHAT_GLOB -REAL, DIMENSION(:), INTENT(IN) :: PYHAT_GLOB -REAL, DIMENSION(:), INTENT(IN) :: PXHATM ! mass point coordinates -REAL, DIMENSION(:), INTENT(IN) :: PYHATM ! mass point coordinates -REAL, INTENT(IN) :: PXHATM_PHYS_MIN, PYHATM_PHYS_MIN ! Minimum X coordinate of mass points in the physical domain -REAL, INTENT(IN) :: PXHATM_PHYS_MAX, PYHATM_PHYS_MAX ! Minimum X coordinate of mass points in the physical domain INTEGER, INTENT(OUT) :: KNUMBSTATPROF ! Total number of stations/profilers (inside physical domain of model) ! CHARACTER(LEN=NMAXLINELGT) :: YSTRING INTEGER :: ILU ! logical unit of the file INTEGER :: INBLINE ! Nb of lines in csv file -INTEGER :: JI LOGICAL :: GINSIDE ! True if station/profiler is inside physical domain of model LOGICAL :: GPRESENT ! True if station/profiler is present on the current process TYPE(TSTATIONDATA), TARGET :: TZSTATION @@ -100,9 +91,7 @@ DO END IF IF ( .NOT. LCARTESIAN ) CALL STATPROF_INI_INTERP( TZSTATPROF ) - CALL STATPROF_POSITION( TZSTATPROF, PXHAT_GLOB, PYHAT_GLOB, PXHATM, PYHATM, & - PXHATM_PHYS_MIN, PXHATM_PHYS_MAX, PYHATM_PHYS_MIN, PYHATM_PHYS_MAX, & - GINSIDE, GPRESENT ) + CALL STATPROF_POSITION( TZSTATPROF, GINSIDE, GPRESENT ) IF ( GINSIDE ) THEN KNUMBSTATPROF = KNUMBSTATPROF + 1 diff --git a/src/MNH/statprof_tools.f90 b/src/MNH/statprof_tools.f90 index e48358ed258207f91fc160e345ea3c6887e1f324..4a0ac4239da1e3e4b218781251bcb24ecaeae442 100644 --- a/src/MNH/statprof_tools.f90 +++ b/src/MNH/statprof_tools.f90 @@ -271,16 +271,15 @@ SUBROUTINE STATPROF_INI_INTERP( TPSTATPROF ) END SUBROUTINE STATPROF_INI_INTERP -! ############################################################################################### -SUBROUTINE STATPROF_POSITION( TPSTATPROF, PXHAT_GLOB, PYHAT_GLOB, PXHATM, PYHATM, & - PXHATM_PHYS_MIN, PXHATM_PHYS_MAX,PYHATM_PHYS_MIN, PYHATM_PHYS_MAX, & - OINSIDE, OPRESENT ) -! ############################################################################################### +! ########################################################### +SUBROUTINE STATPROF_POSITION( TPSTATPROF, OINSIDE, OPRESENT ) +! ########################################################### ! Subroutine to determine the position of a station/profiler on the model grid ! and set the useful coefficients for data interpolation USE MODD_CONF, ONLY: L1D - USE MODD_GRID_n, ONLY: XXHAT, XYHAT, XZZ + USE MODD_GRID_n, ONLY: NPHYS_XMIN, NPHYS_XMAX, NPHYS_YMIN, NPHYS_YMAX, XHAT_BOUND, XHATM_BOUND, & + XXHAT, XYHAT, XXHATM, XYHATM, XZZ USE MODD_PARAMETERS, ONLY: JPHEXT, JPVEXT USE MODE_MSG @@ -290,14 +289,6 @@ SUBROUTINE STATPROF_POSITION( TPSTATPROF, PXHAT_GLOB, PYHAT_GLOB, PXHATM, PYHATM IMPLICIT NONE CLASS(TSTATPROFDATA), INTENT(INOUT) :: TPSTATPROF - REAL, DIMENSION(:), INTENT(IN) :: PXHAT_GLOB - REAL, DIMENSION(:), INTENT(IN) :: PYHAT_GLOB - REAL, DIMENSION(:), INTENT(IN) :: PXHATM ! mass point coordinates - REAL, DIMENSION(:), INTENT(IN) :: PYHATM ! mass point coordinates - REAL, INTENT(IN) :: PXHATM_PHYS_MIN ! Minimum X coordinate of mass points in the physical domain - REAL, INTENT(IN) :: PYHATM_PHYS_MIN ! Minimum Y coordinate of mass points in the physical domain - REAL, INTENT(IN) :: PXHATM_PHYS_MAX ! Maximum X coordinate of mass points in the physical domain - REAL, INTENT(IN) :: PYHATM_PHYS_MAX ! Minimum Y coordinate of mass points in the physical domain LOGICAL, INTENT(OUT) :: OINSIDE ! True if station/profiler is inside physical domain of model LOGICAL, INTENT(OUT) :: OPRESENT ! True if station/profiler is present on the current process @@ -314,8 +305,8 @@ SUBROUTINE STATPROF_POSITION( TPSTATPROF, PXHAT_GLOB, PYHAT_GLOB, PXHATM, PYHATM CALL GET_INDICE_ll( IIB, IJB, IIE, IJE ) - IF ( TPSTATPROF%XX >= PXHAT_GLOB(JPHEXT+1) .AND. TPSTATPROF%XX <= PXHAT_GLOB(UBOUND(PXHAT_GLOB,1)-JPHEXT+1) & - .AND. TPSTATPROF%XY >= PYHAT_GLOB(JPHEXT+1) .AND. TPSTATPROF%XY <= PYHAT_GLOB(UBOUND(PYHAT_GLOB,1)-JPHEXT+1) ) THEN + IF ( TPSTATPROF%XX >= XHAT_BOUND(NPHYS_XMIN) .AND. TPSTATPROF%XX <= XHAT_BOUND(NPHYS_XMAX) & + .AND. TPSTATPROF%XY >= XHAT_BOUND(NPHYS_YMIN) .AND. TPSTATPROF%XY <= XHAT_BOUND(NPHYS_YMAX) ) THEN OINSIDE = .TRUE. ELSE CALL GET_MODEL_NUMBER_ll(IMI) @@ -325,11 +316,11 @@ SUBROUTINE STATPROF_POSITION( TPSTATPROF, PXHAT_GLOB, PYHAT_GLOB, PXHATM, PYHATM ! X position TPSTATPROF%NI_U = COUNT( XXHAT (:) <= TPSTATPROF%XX ) - TPSTATPROF%NI_M = COUNT( PXHATM(:) <= TPSTATPROF%XX ) + TPSTATPROF%NI_M = COUNT( XXHATM(:) <= TPSTATPROF%XX ) ! Y position TPSTATPROF%NJ_V = COUNT( XYHAT (:) <= TPSTATPROF%XY ) - TPSTATPROF%NJ_M = COUNT( PYHATM(:) <= TPSTATPROF%XY ) + TPSTATPROF%NJ_M = COUNT( XYHATM(:) <= TPSTATPROF%XY ) ! Position of station/profiler according to process IF ( TPSTATPROF%NI_U >= IIB .AND. TPSTATPROF%NI_U <= IIE & @@ -338,8 +329,8 @@ SUBROUTINE STATPROF_POSITION( TPSTATPROF, PXHAT_GLOB, PYHAT_GLOB, PXHATM, PYHATM ! Check if station/profiler is too near of physical domain border (outside of physical domain for mass points) IF ( OINSIDE .AND. .NOT. L1D ) THEN - IF ( TPSTATPROF%XX < PXHATM_PHYS_MIN .OR. TPSTATPROF%XX > PXHATM_PHYS_MAX & - .OR. TPSTATPROF%XY < PYHATM_PHYS_MIN .OR. TPSTATPROF%XY > PYHATM_PHYS_MAX ) THEN + IF ( TPSTATPROF%XX < XHATM_BOUND(NPHYS_XMIN) .OR. TPSTATPROF%XX > XHATM_BOUND(NPHYS_XMAX) & + .OR. TPSTATPROF%XY < XHATM_BOUND(NPHYS_YMIN) .OR. TPSTATPROF%XY > XHATM_BOUND(NPHYS_YMAX) ) THEN CALL GET_MODEL_NUMBER_ll(IMI) WRITE( CMNHMSG(1), "( 'station or profiler ', A, ' is outside of mass-points physical domain of model', I3 )" ) & TRIM(TPSTATPROF%CNAME), IMI @@ -355,9 +346,9 @@ SUBROUTINE STATPROF_POSITION( TPSTATPROF, PXHAT_GLOB, PYHAT_GLOB, PXHATM, PYHATM ! Computations only on correct process IF ( OPRESENT .AND. .NOT. L1D ) THEN ! Interpolation coefficient for X (mass-point) - TPSTATPROF%XXMCOEF = ( TPSTATPROF%XX - PXHATM(TPSTATPROF%NI_M) ) / ( PXHATM(TPSTATPROF%NI_M+1) - PXHATM(TPSTATPROF%NI_M) ) + TPSTATPROF%XXMCOEF = ( TPSTATPROF%XX - XXHATM(TPSTATPROF%NI_M) ) / ( XXHATM(TPSTATPROF%NI_M+1) - XXHATM(TPSTATPROF%NI_M) ) ! Interpolation coefficient for Y (mass-point) - TPSTATPROF%XYMCOEF = ( TPSTATPROF%XY - PYHATM(TPSTATPROF%NJ_M) ) / ( PYHATM(TPSTATPROF%NJ_M+1) - PYHATM(TPSTATPROF%NJ_M) ) + TPSTATPROF%XYMCOEF = ( TPSTATPROF%XY - XYHATM(TPSTATPROF%NJ_M) ) / ( XYHATM(TPSTATPROF%NJ_M+1) - XYHATM(TPSTATPROF%NJ_M) ) ! Interpolation coefficient for X (U-point) TPSTATPROF%XXUCOEF = ( TPSTATPROF%XX - XXHAT(TPSTATPROF%NI_U) ) / ( XXHAT(TPSTATPROF%NI_U+1) - XXHAT(TPSTATPROF%NI_U) ) ! Interpolation coefficient for Y (V-point) diff --git a/src/MNH/write_lfifm1_for_diag.f90 b/src/MNH/write_lfifm1_for_diag.f90 index d452fecafad20d6692b2651ff661dc2f9ccafe52..a8330810911dddcf15aa8e877304b7394e7bb532 100644 --- a/src/MNH/write_lfifm1_for_diag.f90 +++ b/src/MNH/write_lfifm1_for_diag.f90 @@ -178,7 +178,8 @@ use modd_field, only: tfieldmetadata, tfieldlist, TYPEINT, TYPEREAL USE MODD_FIELD_n, ONLY: XCIT, XCLDFR, XPABSM, XPABST, XRT, XSIGS, XSRCT, XSVT, XTHT, XTKET, XUT, XVT, XWT, XZWS USE MODD_FRC, ONLY: NFRC, XGXTHFRC, XGYTHFRC, XPGROUNDFRC, XRVFRC, XTENDRVFRC, XTENDTHFRC, XTHFRC, XUFRC, XVFRC, XWFRC USE MODD_GRID, ONLY: XBETA, XLAT0, XLATORI, XLON0, XLONORI, XRPK -USE MODD_GRID_n, only: LSLEVE, XLAT, XLEN1, XLEN2, XLON, XZS, XXHAT, XXHATM, XYHAT, XYHATM, XZHAT, XZSMT, XZTOP, XZZ +USE MODD_GRID_n, only: LSLEVE, NEXTE_XMIN, NEXTE_YMIN, XHATM_BOUND, & + XLAT, XLEN1, XLEN2, XLON, XZS, XXHAT, XXHATM, XYHAT, XYHATM, XZHAT, XZSMT, XZTOP, XZZ USE MODD_IO, ONLY: TFILEDATA USE MODD_LSFIELD_n, ONLY: XLSRVM, XLSTHM, XLSUM, XLSVM, XLSWM USE MODD_LUNIT, ONLY: TLUOUT0 @@ -211,7 +212,6 @@ USE MODE_AERO_PSD, ONLY: PPP2AERO USE MODE_BLOWSNOW_PSD, ONLY: PPP2SNOW USE MODE_DUST_PSD, ONLY: PPP2DUST use mode_field, only: Find_field_id_from_mnhname -use MODE_GATHER_ll, only: GATHERALL_FIELD_ll USE MODE_GRIDPROJ, ONLY: SM_LATLON USE MODE_IO_FIELD_WRITE, only: IO_Field_write USE MODE_IO_FILE, only: IO_File_close, IO_File_open @@ -263,11 +263,6 @@ REAL :: ZRV_OV_RD ! XRV / XRD REAL :: ZGAMREF ! Standard atmosphere lapse rate (K/m) REAL :: ZX0D ! work real scalar REAL :: ZLATOR, ZLONOR ! geographical coordinates of 1st mass point -REAL :: ZXHATM, ZYHATM ! conformal coordinates of 1st mass point -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) ! REAL,DIMENSION(SIZE(XTHT,1),SIZE(XTHT,2),SIZE(XTHT,3)) :: ZPOVO REAL,DIMENSION(SIZE(XTHT,1),SIZE(XTHT,2),SIZE(XTHT,3)) :: ZTEMP @@ -398,13 +393,7 @@ IF (.NOT.LCARTESIAN) THEN ! !* diagnostic of 1st mass point ! - ALLOCATE(ZXHAT_ll(NIMAX_ll+ 2 * JPHEXT),ZYHAT_ll(NJMAX_ll+2 * JPHEXT)) - CALL GATHERALL_FIELD_ll('XX',XXHAT,ZXHAT_ll,IRESP) !// - CALL GATHERALL_FIELD_ll('YY',XYHAT,ZYHAT_ll,IRESP) !// - ZXHATM = 0.5 * (ZXHAT_ll(1)+ZXHAT_ll(2)) - ZYHATM = 0.5 * (ZYHAT_ll(1)+ZYHAT_ll(2)) - CALL SM_LATLON(XLATORI,XLONORI,ZXHATM,ZYHATM,ZLATOR,ZLONOR) - DEALLOCATE(ZXHAT_ll,ZYHAT_ll) + CALL SM_LATLON( XLATORI, XLONORI, XHATM_BOUND(NEXTE_XMIN), XYHATM(NEXTE_XMIN), ZLATOR, ZLONOR ) ! CALL IO_Field_write(TPFILE,'LONOR',ZLONOR) CALL IO_Field_write(TPFILE,'LATOR',ZLATOR) diff --git a/src/MNH/write_lfifmn_fordiachron.f90 b/src/MNH/write_lfifmn_fordiachron.f90 index d6c6ba317f2e39677d1aa0befe5efbebf1116e54..83b6d0a9b6b46fe23d4880593916822acbd11a18 100644 --- a/src/MNH/write_lfifmn_fordiachron.f90 +++ b/src/MNH/write_lfifmn_fordiachron.f90 @@ -1,4 +1,4 @@ -!MNH_LIC Copyright 1994-2019 CNRS, Meteo-France and Universite Paul Sabatier +!MNH_LIC Copyright 1994-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. @@ -109,7 +109,6 @@ USE MODD_TYPE_DATE USE MODD_NESTING USE MODD_IO, ONLY: TFILEDATA ! -USE MODE_GATHER_ll USE MODE_GRIDPROJ USE MODE_IO_FIELD_WRITE, only: IO_Field_write USE MODE_ll @@ -127,11 +126,6 @@ INTEGER :: IRESP ! return-code! LOGICAL :: GPACK ! REAL :: ZLATOR, ZLONOR ! geographical coordinates of 1st mass point -REAL :: ZXHATM, ZYHATM ! conformal coordinates of 1st mass point -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) ! !------------------------------------------------------------------------------- ! @@ -163,13 +157,7 @@ IF (.NOT.LCARTESIAN) THEN ! !* diagnostic of 1st mass point ! - ALLOCATE(ZXHAT_ll(NIMAX_ll+ 2 * JPHEXT),ZYHAT_ll(NJMAX_ll+2 * JPHEXT)) - CALL GATHERALL_FIELD_ll('XX',XXHAT,ZXHAT_ll,IRESP) !// - CALL GATHERALL_FIELD_ll('YY',XYHAT,ZYHAT_ll,IRESP) !// - ZXHATM = 0.5 * (ZXHAT_ll(1)+ZXHAT_ll(2)) - ZYHATM = 0.5 * (ZYHAT_ll(1)+ZYHAT_ll(2)) - CALL SM_LATLON(XLATORI,XLONORI,ZXHATM,ZYHATM,ZLATOR,ZLONOR) - DEALLOCATE(ZXHAT_ll,ZYHAT_ll) + CALL SM_LATLON( XLATORI, XLONORI, XHATM_BOUND(NEXTE_XMIN), XYHATM(NEXTE_XMIN), ZLATOR, ZLONOR ) ! CALL IO_Field_write(TPFILE,'LONOR',ZLONOR) CALL IO_Field_write(TPFILE,'LATOR',ZLATOR) diff --git a/src/MNH/write_lfin.f90 b/src/MNH/write_lfin.f90 index c1fdfcd2c59835c512bff72284523dff8bb05a92..8818506c3ca31342dc9deca93164fa27166c14bb 100644 --- a/src/MNH/write_lfin.f90 +++ b/src/MNH/write_lfin.f90 @@ -259,7 +259,6 @@ USE MODD_TURB_n USE MODE_EXTRAPOL use mode_field, only: Find_field_id_from_mnhname -USE MODE_GATHER_ll USE MODE_GRIDPROJ USE MODE_IO_FIELD_WRITE, only: IO_Field_write USE MODE_IO_FILE, only: IO_File_close @@ -299,11 +298,6 @@ REAL,DIMENSION(:,:), ALLOCATABLE :: ZWORK2D ! Working array REAL,DIMENSION(:,:,:), ALLOCATABLE :: ZWORK3D ! Working array ! REAL :: ZLATOR, ZLONOR ! geographical coordinates of 1st mass point -REAL :: ZXHATM, ZYHATM ! conformal coordinates of 1st mass point -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 :: IMI ! Current model index ! INTEGER :: INFO_ll @@ -366,13 +360,7 @@ IF (.NOT.LCARTESIAN) THEN ! !* diagnostic of 1st mass point ! - ALLOCATE(ZXHAT_ll(NIMAX_ll+ 2 * JPHEXT),ZYHAT_ll(NJMAX_ll+2 * JPHEXT)) - CALL GATHERALL_FIELD_ll('XX',XXHAT,ZXHAT_ll,IRESP) !// - CALL GATHERALL_FIELD_ll('YY',XYHAT,ZYHAT_ll,IRESP) !// - ZXHATM = 0.5 * (ZXHAT_ll(1)+ZXHAT_ll(2)) - ZYHATM = 0.5 * (ZYHAT_ll(1)+ZYHAT_ll(2)) - CALL SM_LATLON(XLATORI,XLONORI,ZXHATM,ZYHATM,ZLATOR,ZLONOR) - DEALLOCATE(ZXHAT_ll,ZYHAT_ll) + CALL SM_LATLON( XLATORI, XLONORI, XHATM_BOUND(NEXTE_XMIN), XYHATM(NEXTE_XMIN), ZLATOR, ZLONOR ) ! CALL IO_Field_write(TPFILE,'LONOR',ZLONOR) CALL IO_Field_write(TPFILE,'LATOR',ZLATOR)