!! Copyright (C) Stichting Deltares, 2005-2019. !! !! This file is part of iMOD. !! !! This program is free software: you can redistribute it and/or modify !! it under the terms of the GNU General Public License as published by !! the Free Software Foundation, either version 3 of the License, or !! (at your option) any later version. !! !! This program is distributed in the hope that it will be useful, !! but WITHOUT ANY WARRANTY; without even the implied warranty of !! MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the !! GNU General Public License for more details. !! !! You should have received a copy of the GNU General Public License !! along with this program. If not, see . !! !! Contact: imod.support@deltares.nl !! Stichting Deltares !! P.O. Box 177 !! 2600 MH Delft, The Netherlands. !! MODULE MOD_MSPINSPECTOR_UTL USE WINTERACTER USE RESOURCE USE MOD_IDF, ONLY : IDFDEALLOCATEX,IDFGETEDGE,IDFGETLOC,IDFGETDXDY,IDFCHECKRC USE IMODVAR, ONLY : IDIAGERROR USE MOD_MSPINSPECTOR_PAR USE MOD_DBL, ONLY : DBL_IGRRECTANGLE,DBL_IGRCIRCLE,DBL_IGRJOIN USE MOD_UTL, ONLY : UTL_PLOT1BITMAP,UTL_PLOT2BITMAP,UTL_INVERSECOLOUR,UTL_GETUNIT USE MOD_OSD, ONLY : OSD_OPEN CONTAINS !###====================================================================== SUBROUTINE MSPINSPECTOR_DEALLOCATE() !###====================================================================== IMPLICIT NONE IF(ASSOCIATED(DXC%INFO)) DEALLOCATE(DXC%INFO) IF(ASSOCIATED(DXC%LABEL))DEALLOCATE(DXC%LABEL) IF(ASSOCIATED(DXC%IACT)) DEALLOCATE(DXC%IACT) IF(ASSOCIATED(DXC%UNIT)) DEALLOCATE(DXC%UNIT) IF(ASSOCIATED(DXC%INSPVAL)) DEALLOCATE(DXC%INSPVAL) IF(ASSOCIATED(DXC%DXCIREC)) DEALLOCATE(DXC%DXCIREC) IF(ASSOCIATED(MODSVAT%INFO)) DEALLOCATE(MODSVAT%INFO) IF(ASSOCIATED(MODSVAT%LABEL))DEALLOCATE(MODSVAT%LABEL) IF(ASSOCIATED(MODSVAT%IACT)) DEALLOCATE(MODSVAT%IACT) IF(ASSOCIATED(MODSVAT%UNIT)) DEALLOCATE(MODSVAT%UNIT) IF(ASSOCIATED(MODSVAT%INSPVAL)) DEALLOCATE(MODSVAT%INSPVAL) IF(ASSOCIATED(IDFSVAT%INFO)) DEALLOCATE(IDFSVAT%INFO) IF(ASSOCIATED(IDFSVAT%LABEL))DEALLOCATE(IDFSVAT%LABEL) IF(ASSOCIATED(IDFSVAT%IACT)) DEALLOCATE(IDFSVAT%IACT) IF(ASSOCIATED(IDFSVAT%UNIT)) DEALLOCATE(IDFSVAT%UNIT) IF(ASSOCIATED(IDFSVAT%INSPVAL)) DEALLOCATE(IDFSVAT%INSPVAL) IF(ASSOCIATED(AREASVAT%INFO)) DEALLOCATE(AREASVAT%INFO) IF(ASSOCIATED(AREASVAT%LABEL))DEALLOCATE(AREASVAT%LABEL) IF(ASSOCIATED(AREASVAT%IACT)) DEALLOCATE(AREASVAT%IACT) IF(ASSOCIATED(AREASVAT%UNIT)) DEALLOCATE(AREASVAT%UNIT) IF(ASSOCIATED(AREASVAT%INSPVAL)) DEALLOCATE(AREASVAT%INSPVAL) IF(ASSOCIATED(INFISVAT%INFO)) DEALLOCATE(INFISVAT%INFO) IF(ASSOCIATED(INFISVAT%LABEL))DEALLOCATE(INFISVAT%LABEL) IF(ASSOCIATED(INFISVAT%IACT)) DEALLOCATE(INFISVAT%IACT) IF(ASSOCIATED(INFISVAT%UNIT)) DEALLOCATE(INFISVAT%UNIT) IF(ASSOCIATED(INFISVAT%INSPVAL)) DEALLOCATE(INFISVAT%INSPVAL) IF(ASSOCIATED(FACTSVAT%INFO)) DEALLOCATE(FACTSVAT%INFO) IF(ASSOCIATED(FACTSVAT%LABEL))DEALLOCATE(FACTSVAT%LABEL) IF(ASSOCIATED(FACTSVAT%IACT)) DEALLOCATE(FACTSVAT%IACT) IF(ASSOCIATED(FACTSVAT%UNIT)) DEALLOCATE(FACTSVAT%UNIT) IF(ASSOCIATED(FACTSVAT%INSPVAL)) DEALLOCATE(FACTSVAT%INSPVAL) IF(ASSOCIATED(FACTSVAT%GRAPH)) DEALLOCATE(FACTSVAT%GRAPH) IF(ASSOCIATED(LUSESVAT%INFO)) DEALLOCATE(LUSESVAT%INFO) IF(ASSOCIATED(LUSESVAT%LABEL))DEALLOCATE(LUSESVAT%LABEL) IF(ASSOCIATED(LUSESVAT%IACT)) DEALLOCATE(LUSESVAT%IACT) IF(ASSOCIATED(LUSESVAT%UNIT)) DEALLOCATE(LUSESVAT%UNIT) IF(ASSOCIATED(LUSESVAT%INSPVAL)) DEALLOCATE(LUSESVAT%INSPVAL) ! IF(ASSOCIATED(LUSESVAT%GRAPH)) DEALLOCATE(LUSESVAT%GRAPH) IF(ASSOCIATED(METEGRID%INFO)) DEALLOCATE(METEGRID%INFO) IF(ASSOCIATED(METEGRID%LABEL))DEALLOCATE(METEGRID%LABEL) IF(ASSOCIATED(METEGRID%IACT)) DEALLOCATE(METEGRID%IACT) IF(ASSOCIATED(METEGRID%UNIT)) DEALLOCATE(METEGRID%UNIT) IF(ASSOCIATED(METEGRID%INSPVAL)) DEALLOCATE(METEGRID%INSPVAL) IF(ASSOCIATED(METEGRID%GRAPH)) DEALLOCATE(METEGRID%GRAPH) IF(ASSOCIATED(SCAPSVAT%INFO)) DEALLOCATE(SCAPSVAT%INFO) IF(ASSOCIATED(SCAPSVAT%LABEL))DEALLOCATE(SCAPSVAT%LABEL) IF(ASSOCIATED(SCAPSVAT%IACT)) DEALLOCATE(SCAPSVAT%IACT) IF(ASSOCIATED(SCAPSVAT%UNIT)) DEALLOCATE(SCAPSVAT%UNIT) IF(ASSOCIATED(SCAPSVAT%INSPVAL)) DEALLOCATE(SCAPSVAT%INSPVAL) IF(ASSOCIATED(SVATETREF%INFO)) DEALLOCATE(SVATETREF%INFO) IF(ASSOCIATED(SVATETREF%LABEL))DEALLOCATE(SVATETREF%LABEL) IF(ASSOCIATED(SVATETREF%IACT)) DEALLOCATE(SVATETREF%IACT) IF(ASSOCIATED(SVATETREF%UNIT)) DEALLOCATE(SVATETREF%UNIT) IF(ASSOCIATED(SVATETREF%INSPVAL)) DEALLOCATE(SVATETREF%INSPVAL) IF(ASSOCIATED(SVATPREC%INFO)) DEALLOCATE(SVATPREC%INFO) IF(ASSOCIATED(SVATPREC%LABEL))DEALLOCATE(SVATPREC%LABEL) IF(ASSOCIATED(SVATPREC%IACT)) DEALLOCATE(SVATPREC%IACT) IF(ASSOCIATED(SVATPREC%UNIT)) DEALLOCATE(SVATPREC%UNIT) IF(ASSOCIATED(SVATPREC%INSPVAL)) DEALLOCATE(SVATPREC%INSPVAL) IF(ASSOCIATED(TIOPSIM%INFO)) DEALLOCATE(TIOPSIM%INFO) IF(ASSOCIATED(TIOPSIM%LABEL))DEALLOCATE(TIOPSIM%LABEL) IF(ASSOCIATED(TIOPSIM%IACT)) DEALLOCATE(TIOPSIM%IACT) IF(ASSOCIATED(TIOPSIM%UNIT)) DEALLOCATE(TIOPSIM%UNIT) IF(ASSOCIATED(SVAT2SWNRROFF%INFO)) DEALLOCATE(SVAT2SWNRROFF%INFO) IF(ASSOCIATED(SVAT2SWNRROFF%LABEL)) DEALLOCATE(SVAT2SWNRROFF%LABEL) IF(ASSOCIATED(SVAT2SWNRROFF%IACT)) DEALLOCATE(SVAT2SWNRROFF%IACT) IF(ASSOCIATED(SVAT2SWNRROFF%UNIT)) DEALLOCATE(SVAT2SWNRROFF%UNIT) IF(ASSOCIATED(SVAT2SWNRROFF%INSPVAL)) DEALLOCATE(SVAT2SWNRROFF%INSPVAL) CALL IDFDEALLOCATEX(MSPIDF) CALL IDFDEALLOCATEX(MSPIDF) CALL IDFDEALLOCATEX(SCAPSVAT_LYAB) CALL IDFDEALLOCATEX(SVATRU) CALL IDFDEALLOCATEX(SVATUR) CALL IDFDEALLOCATEX(SVATIR) CALL IDFDEALLOCATEX(SVATIRS) CALL IDFDEALLOCATEX(METEO) END SUBROUTINE MSPINSPECTOR_DEALLOCATE !###====================================================================== SUBROUTINE MSPINSPECTOR_CLEANGRIDS() !###====================================================================== IMPLICIT NONE INTEGER :: IROW CALL WDIALOGSELECT(ID_DMSPANALYSER_TAB2) ; CALL WGRIDCLEAR(IDF_GRID1); CALL WGRIDCLEAR(IDF_GRID2); CALL WGRIDCLEAR(IDF_GRID4); CALL WGRIDCLEAR(IDF_GRID5) CALL WGRIDCLEARCELL(IDF_GRID3,2,1) ; CALL WGRIDCLEARCELL(IDF_GRID3,3,1) CALL WDIALOGSELECT(ID_DMSPANALYSER_TAB4) ; CALL WGRIDCLEAR(IDF_GRID1); CALL WGRIDCLEAR(IDF_GRID2); !## remove drawn irrigation rectangles CALL MSPINSPECTOR_CLEANSCAPPOINTER() !## fill tabs 2 CALL WDIALOGSELECT(ID_DMSPANALYSER_TAB2) CALL WGRIDPUTCELLSTRING(IDF_GRID1,1,1,'Rural') CALL WGRIDPUTCELLSTRING(IDF_GRID1,1,2,'Irrigation') CALL WGRIDPUTCELLSTRING(IDF_GRID1,1,3,'Urban') CALL WGRIDPUTCELLSTRING(IDF_GRID1,1,4,'Nopp') CALL WGRIDPUTCELLSTRING(IDF_GRID3,1,1,'SVAT_ID') CALL WGRIDPUTCELLSTRING(IDF_GRID3,1,2,'Mouse') !## Delete column in tabs 3 CALL WDIALOGSELECT(ID_DMSPANALYSER_TAB3) DO IROW = 1,TAB3GRIDSIZE CALL WGRIDCLEARCELL(IDF_GRID1,2,IROW) END DO END SUBROUTINE MSPINSPECTOR_CLEANGRIDS !###====================================================================== SUBROUTINE MSPINSPECTOR_CLEANSCAPPOINTER() !###====================================================================== IMPLICIT NONE INTEGER :: ICOL,IROW,I REAL(KIND=DP_KIND) :: X1,Y1,X2,Y2,DX,DY CALL WDIALOGSELECT(ID_DMSPANALYSER_TAB4) CALL IGRCOLOURN(UTL_INVERSECOLOUR(WRGB(0,0,255))) !## blue rectancle for irrigation cells CALL UTL_PLOT1BITMAP() !## clean extraction location indicator IF(WInfoGridCell(IDF_GRID3,1,1,1).EQ.1) THEN CALL WGridGetCellInteger(IDF_GRID3,1,1,IROW) CALL WGridGetCellInteger(IDF_GRID3,2,1,ICOL) CALL IDFGETLOC(MSPIDF,IROW,ICOL,X1,Y1); CALL IGRFILLPATTERN(SOLID); CALL IDFGETDXDY(MSPIDF,ICOL,IROW,DX,DY) CALL DBL_IGRCIRCLE(X1,Y1,0.5D0*DX,IOFFSET=1) X2=X1; Y2=Y1 CALL WGRIDCLEAR(IDF_GRID3) ENDIF !## clean irrigated cells indicator I=1 CALL IGRFILLPATTERN(OUTLINE) DO IF(WInfoGridCell(IDF_GRID4,1,I,1).EQ.0)EXIT CALL WGridGetCellInteger(IDF_GRID4,1,I,IROW) CALL WGridGetCellInteger(IDF_GRID4,2,I,ICOL) IF(IDFCHECKRC(MSPIDF,IROW,ICOL))THEN IF(MSPIDF%X(ICOL,IROW).GT.0.)THEN CALL IDFGETDXDY(MSPIDF,ICOL,IROW,DX,DY); CALL IDFGETLOC(MSPIDF,IROW,ICOL,X1,Y1) CALL DBL_IGRJOIN(X1,Y1,X2,Y2,IOFFSET=1); CALL DBL_IGRCIRCLE(X1,Y1,0.4D0*DX,IOFFSET=1) MSPIDF%X(ICOL,IROW)=0. ENDIF ENDIF I=I+1 ENDDO CALL UTL_PLOT2BITMAP() CALL WGRIDCLEAR(IDF_GRID4) END SUBROUTINE MSPINSPECTOR_CLEANSCAPPOINTER !###====================================================================== SUBROUTINE MSPINSPECTOR_HANDLEFIELD(IACT) !###====================================================================== IMPLICIT NONE INTEGER :: IACT !## enable tabs and bottons after hoovering CALL WDIALOGSELECT(ID_DMSPANALYSER) CALL WDIALOGTABSTATE(IDF_TAB1,ID_DMSPANALYSER_TAB5,IACT) CALL WDIALOGFIELDSTATE(IDOK,IACT) CALL WDIALOGSELECT(ID_DMSPANALYSER_TAB1) CALL WDIALOGFIELDSTATE(ID_OPEN,IACT) CALL WDIALOGSELECT(ID_DMSPANALYSER_TAB3) CALL WDIALOGFIELDSTATE(ID_CREATEIDF,IACT) CALL WDIALOGFIELDSTATE(ID_GRAPH,IACT) END SUBROUTINE MSPINSPECTOR_HANDLEFIELD !###====================================================================== SUBROUTINE MSPINSPECTOR_SVAT2ROWCOL(SVATID,IROW,ICOL,MFID) !###====================================================================== IMPLICIT NONE INTEGER,INTENT(IN) :: SVATID INTEGER,INTENT(OUT) :: IROW,ICOL,MFID INTEGER :: I,J IROW=0 ; ICOL=0 ; MFID=0 DO I=1,MODSVAT%MXID !## search corresponding MF id IF(SVATID.EQ.MODSVAT%INFO(I)%SVATID)THEN ; MFID=MODSVAT%INFO(I)%MFID ; EXIT ; ENDIF ENDDO DO J=1,IDFSVAT%MXID !## search corresponding ROW COL IF(SVATID.EQ.IDFSVAT%INFO(J)%SVAT)THEN ; IROW=IDFSVAT%INFO(J)%ROW ; ICOL=IDFSVAT%INFO(J)%COL ; EXIT ; ENDIF ENDDO END SUBROUTINE MSPINSPECTOR_SVAT2ROWCOL !###====================================================================== SUBROUTINE MSPINSPECTOR_MFID2LAYROWCOL(MFID,ILAY,IROW,ICOL) !###====================================================================== IMPLICIT NONE INTEGER,INTENT(IN) :: MFID INTEGER,INTENT(OUT) :: ILAY,IROW,ICOL INTEGER :: I ILAY=0 ; IROW=0 ; ICOL=0 DO I=1,DXC%MXID !## search corresponding ROW COL IF(MFID.EQ.DXC%INFO(I)%MFID)THEN ILAY=DXC%INFO(I)%ILAY IROW=DXC%INFO(I)%IROW ICOL=DXC%INFO(I)%ICOL EXIT ENDIF ENDDO END SUBROUTINE MSPINSPECTOR_MFID2LAYROWCOL !###====================================================================== SUBROUTINE MSPINSPECTOR_REMRECT() !###====================================================================== IMPLICIT NONE REAL(KIND=DP_KIND) :: X1,Y1,X2,Y2 !## remove old drawn rectangle CALL WDIALOGSELECT(ID_DMSPANALYSER_TAB2) IF(WInfoGridCell(IDF_GRID2,2,1,1).EQ.1)THEN CALL WGRIDGETCELLINTEGER(IDF_GRID2,2,1,MOUSEROW) CALL WGRIDGETCELLINTEGER(IDF_GRID2,3,1,MOUSECOL) IF(MOUSECOL.NE.0)THEN CALL IGRLINETYPE(OUTLINE); CALL IGRLINEWIDTH(3); CALL IGRCOLOURN(UTL_INVERSECOLOUR(WRGB(255,0,0))); CALL IGRPLOTMODE(MODEXOR) CALL UTL_PLOT1BITMAP() CALL IDFGETEDGE(MSPIDF,MOUSEROW,MOUSECOL,X1,Y1,X2,Y2) CALL DBL_IGRRECTANGLE(X1,Y1,X2,Y2,IOFFSET=1) CALL UTL_PLOT2BITMAP() ENDIF ENDIF END SUBROUTINE MSPINSPECTOR_REMRECT !###====================================================================== SUBROUTINE MSPINSPECTOR_CLOSE() !###====================================================================== IMPLICIT NONE CALL MSPINSPECTOR_REMRECT() IDIAGERROR=1 CALL WINDOWSELECT(0); CALL WMENUSETSTATE(ID_MSPANALYSER,2,0) CALL MSPINSPECTOR_DEALLOCATE() CALL WDIALOGSELECT(ID_DMSPANALYSER); CALL WDIALOGUNLOAD() IDIAGERROR=0 END SUBROUTINE MSPINSPECTOR_CLOSE END MODULE MOD_MSPINSPECTOR_UTL