MODULE MOD_PMANAGER_UTL USE WINTERACTER USE MOD_PMANAGER_PAR USE MOD_IDF, ONLY : IDFNULLIFY,IDFDEALLOCATEX,IDFCOPY CONTAINS !###====================================================================== LOGICAL FUNCTION PMANAGER_SAVEMF2005_PCK_GETMINMAX(X,NCOL,NROW,XB,MINV,MAXV,IFBND,EXFNAME) !###====================================================================== IMPLICIT NONE CHARACTER(LEN=*),INTENT(IN) :: EXFNAME REAL,INTENT(IN),DIMENSION(NCOL,NROW) :: X,XB INTEGER,INTENT(IN) :: NROW,NCOL,IFBND INTEGER :: IROW,ICOL,I REAL,INTENT(OUT) :: MINV,MAXV PMANAGER_SAVEMF2005_PCK_GETMINMAX=.FALSE. MINV=HUGE(1.0); MAXV=-HUGE(1.0); I=0 DO IROW=1,IDF%NROW; DO ICOL=1,IDF%NCOL !## skip nodata points IF(X(ICOL,IROW).EQ.HNOFLOW)CYCLE !## check on active nodes only IF(IFBND.EQ.1)THEN IF(XB(ICOL,IROW).NE.0)THEN MINV=MIN(MINV,X(ICOL,IROW)) MAXV=MAX(MAXV,X(ICOL,IROW)) I =I+1 ENDIF ELSE MINV=MIN(MINV,X(ICOL,IROW)) MAXV=MAX(MAXV,X(ICOL,IROW)) I =I+1 ENDIF ENDDO; ENDDO IF(I.LE.0)THEN MAXV=MINV ! CALL WMESSAGEBOX(OKONLY,EXCLAMATIONICON,COMMONOK,'Cannot find any data for active cells'//CHAR(13)// & ! TRIM(EXFNAME),'Error') ENDIF PMANAGER_SAVEMF2005_PCK_GETMINMAX=.TRUE. END FUNCTION PMANAGER_SAVEMF2005_PCK_GETMINMAX !###====================================================================== SUBROUTINE PMANAGER_SAVEMF2005_ALLOCATEPCK(N) !###====================================================================== IMPLICIT NONE INTEGER,INTENT(IN) :: N INTEGER :: I IF(ALLOCATED(PCK))CALL PMANAGER_SAVEMF2005_DEALLOCATEPCK() ALLOCATE(PCK(N)) DO I=1,N CALL IDFNULLIFY(PCK(I)) CALL IDFCOPY(BND(1),PCK(I)) ENDDO END SUBROUTINE PMANAGER_SAVEMF2005_ALLOCATEPCK !###====================================================================== SUBROUTINE PMANAGER_SAVEMF2005_DEALLOCATEPCK() !###====================================================================== IMPLICIT NONE INTEGER:: N,I IF(.NOT.ALLOCATED(PCK))RETURN N=SIZE(PCK) DO I=1,N; CALL IDFDEALLOCATEX(PCK(I)); ENDDO DEALLOCATE(PCK) END SUBROUTINE PMANAGER_SAVEMF2005_DEALLOCATEPCK END MODULE MOD_PMANAGER_UTL