!! Copyright (C) Stichting Deltares, 2005-2020. !! !! 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 USE WINTERACTER USE RESOURCE USE MOD_COLOURS USE IMODVAR, ONLY : OFFSETX,OFFSETY USE MOD_MSPINSPECTOR_PAR USE MOD_MSPINSPECTOR_UTL USE MOD_GRAPH USE MOD_GRAPH_PAR USE MOD_IDFPLOT, ONLY : IDFPLOT,IDFZOOM USE MODPLOT, ONLY : MPW USE MOD_PREF_PAR, ONLY : PREFVAL USE MOD_DBL, ONLY : DBL_IGRRECTANGLE,DBL_IGRCIRCLE USE MOD_IDF, ONLY : IDFNULLIFY,IDFALLOCATEX,IDFGETEDGE,IDFIROWICOL,IDFGETDXDY,IDFGETLOC,IDFCOPY,IDFWRITE,IDFGETVAL,IDFREAD,IDFCHECKRC USE MOD_UTL, ONLY : UTL_GETUNIT,UTL_CAP,UTL_IMODFILLMENU,ITIMETOGDATE,RTOS,UTL_PLOT1BITMAP,UTL_PLOT2BITMAP,UTL_FILLDATES,LISTNAME,UTL_INVERSECOLOUR,UTL_GDATE,UTL_GETDAYANDMONTHFROMDAYNUMBER, & UTL_FILLDATESDIALOG,UTL_DEBUGLEVEL,UTL_GETHELP USE MOD_MAIN_UTL, ONLY : MAIN_UTL_INACTMODULE USE MOD_POLINT, ONLY : POL1LOCATE,POL1LOCATEINT USE DATEVAR USE MOD_MANAGER_UTL, ONLY : MANAGER_UTL_ADDFILE USE MOD_ASC2IDF, ONLY: ASC2IDF_IMPORTASC CONTAINS !###====================================================================== SUBROUTINE MSPINSPECTOR_MAIN(ITYPE,MESSAGE) !###====================================================================== IMPLICIT NONE TYPE(WIN_MESSAGE),INTENT(INOUT) :: MESSAGE INTEGER,INTENT(IN) :: ITYPE SELECT CASE (MESSAGE%WIN) CASE (ID_DMSPANALYSER_TAB1); CALL MSPINSPECTOR_TAB1(ITYPE,MESSAGE) CASE (ID_DMSPANALYSER_TAB2); CALL MSPINSPECTOR_TAB2(ITYPE,MESSAGE) CASE (ID_DMSPANALYSER_TAB3); CALL MSPINSPECTOR_TAB3(ITYPE,MESSAGE) CASE (ID_DMSPANALYSER_TAB4); CALL MSPINSPECTOR_TAB4(ITYPE,MESSAGE) CASE (ID_DMSPANALYSER_TAB5); CALL MSPINSPECTOR_TAB5(ITYPE,MESSAGE) CASE (ID_DMSPANALYSER) SELECT CASE (ITYPE) !## case tab changed CASE (TABCHANGED) SELECT CASE (MESSAGE%VALUE1) END SELECT !## case field changed CASE (FIELDCHANGED) CALL MSPINSPECTOR_MAIN_FIELDS() !## pushbutton CASE (PUSHBUTTON) SELECT CASE (MESSAGE%VALUE1) CASE(IDOK) CALL MSPINSPECTOR_GETXY() CASE (IDHELP) CALL UTL_GETHELP('MetaSWAP Analyser','TMO.MspAna') CASE (IDCANCEL) CALL MSPINSPECTOR_CLOSE() END SELECT END SELECT END SELECT END SUBROUTINE MSPINSPECTOR_MAIN !###====================================================================== SUBROUTINE MSPINSPECTOR_TAB1(ITYPE,MESSAGE) !###====================================================================== IMPLICIT NONE TYPE(WIN_MESSAGE),INTENT(INOUT) :: MESSAGE INTEGER,INTENT(IN) :: ITYPE INTEGER :: I SELECT CASE (ITYPE) !## case field changed CASE (FIELDCHANGED) IF(MESSAGE%VALUE1.EQ.MESSAGE%VALUE2)THEN SELECT CASE (MESSAGE%VALUE1) CASE (IDF_RADIO1,IDF_RADIO2,IDF_STRING1) CALL MSPINSPECTOR_TAB1_FIELDS() CASE (IDF_MENU1) CALL MSPINSPECTOR_OPENFILES_FIELDS(0) END SELECT ENDIF !## pushbutton CASE (PUSHBUTTON) SELECT CASE (MESSAGE%VALUE1) !## select folder CASE (ID_SELECT) ROOT=TRIM(PREFVAL(1))//'\MODEL\' CALL WSELECTDIR(DIRCHANGE,ROOT,'Select Model Result Directory') IF(WINFODIALOG(4).EQ.1)THEN CALL WDIALOGSELECT(ID_DMSPANALYSER_TAB1); CALL WDIALOGPUTSTRING(IDF_STRING1,TRIM(ROOT)) CALL MSPINSPECTOR_FILL_FOLDERLIST() ENDIF !## read files CASE (ID_OPEN) I=1; IF(.NOT.MSPINSPECTOR_OPENFILES())THEN; I=0; CALL WDIALOGSELECT(ID_DIRPROGRESS); CALL WDIALOGUNLOAD(); CALL MSPINSPECTOR_DEALLOCATE(); ENDIF CALL MSPINSPECTOR_OPENFILES_FIELDS(I) !## zoom to full extent CASE (ID_ZOOMFULL) MPW%XMIN=MSPIDF%XMIN; MPW%XMAX=MSPIDF%XMAX; MPW%YMIN=MSPIDF%YMIN; MPW%YMAX=MSPIDF%YMAX CALL IDFZOOM(ID_DGOTOXY,0.0D0,0.0D0,0); CALL IDFPLOT(1) END SELECT END SELECT END SUBROUTINE MSPINSPECTOR_TAB1 !###====================================================================== SUBROUTINE MSPINSPECTOR_TAB2(ITYPE,MESSAGE) !###====================================================================== IMPLICIT NONE TYPE(WIN_MESSAGE),INTENT(INOUT) :: MESSAGE INTEGER,INTENT(IN) :: ITYPE SELECT CASE (ITYPE) !## case field changed CASE (FIELDCHANGED) CALL MSPINSPECTOR_TAB2_FIELDS() !## pushbutton CASE (PUSHBUTTON) SELECT CASE (MESSAGE%VALUE1) END SELECT END SELECT END SUBROUTINE MSPINSPECTOR_TAB2 !###====================================================================== SUBROUTINE MSPINSPECTOR_TAB3(ITYPE,MESSAGE) !###====================================================================== IMPLICIT NONE TYPE(WIN_MESSAGE),INTENT(INOUT) :: MESSAGE INTEGER,INTENT(IN) :: ITYPE SELECT CASE (ITYPE) !## case field changed CASE (FIELDCHANGED) CALL MSPINSPECTOR_TAB3_FIELDS() CALL WDIALOGSELECT(MESSAGE%WIN) IF(MESSAGE%VALUE1.EQ.MESSAGE%VALUE2)THEN SELECT CASE (MESSAGE%VALUE1) !## switch between Rural / Urban info in grid CASE (IDF_RADIO1,IDF_RADIO2) !## Check if Inspector has selected a cell, which cell CALL WDIALOGSELECT(ID_DMSPANALYSER_TAB2) IF(WInfoGridCell(IDF_GRID2,2,1,1).EQ.1)THEN MOUSEROW=0 ; MOUSECOL=0 CALL WGRIDGETCELLINTEGER(IDF_GRID2,2,1,MOUSEROW) CALL WGRIDGETCELLINTEGER(IDF_GRID2,3,1,MOUSECOL) !## if cell is selected put parameter values for selected radio button IF(MOUSECOL*MOUSEROW.NE.0) CAll MSPINSPECTOR_GETXY_PUTVALUES(MOUSEROW,MOUSECOL) ENDIF END SELECT ENDIF !## pushbutton CASE (PUSHBUTTON) SELECT CASE (MESSAGE%VALUE1) !## draw graph of selected features CASE(ID_GRAPH) CALL MSPINSPECTOR_TAB3_GRAPH() CALL WDIALOGSELECT(ID_DMSPANALYSER_TAB3); CALL WDIALOGFIELDSTATE(IDF_PROGRESS1,3); CALL WDIALOGFIELDSTATE(IDF_PROGRESS2,3) CASE(ID_CREATEIDF) CALL MSPINSPECTOR_TAB3_CREATEIDF() END SELECT END SELECT END SUBROUTINE MSPINSPECTOR_TAB3 !###====================================================================== SUBROUTINE MSPINSPECTOR_TAB3_GRAPH() !###====================================================================== IMPLICIT NONE INTEGER :: II,I,J,M,N,WID,FTYPE,STYPE,ICOL,IROW,IERROR,NG,IVEGTYPE,I1,I2,IOS,ITYPE,JDATE TYPE(WIN_MESSAGE) :: MESSAGE REAL(KIND=DP_KIND) :: XV LOGICAL :: LDATE CALL MSPINSPECTOR_TAB3_GETPARAMLIST() CALL MSPINSPECTOR_TAB5_FIELDS() !## number of lines to be combined M=1 !## number of graphs/groups - seperate of at the same moment (all or not all) !## find out how many graphs active NG=0 DO I=1,SIZE(FACTSVAT%IACT); IF(FACTSVAT%IACT(I).EQ.1.AND.FACTSVAT%GRAPH(I).EQ.1)NG=NG+1; ENDDO DO I=1,SIZE(METEGRID%IACT); IF(METEGRID%IACT(I).EQ.1.AND.METEGRID%GRAPH(I).EQ.1)NG=NG+1; ENDDO CALL WDIALOGSELECT(ID_DMSPANALYSER_TAB3) CALL WDIALOGFIELDSTATE(IDF_PROGRESS1,1); CALL WDIALOGFIELDSTATE(IDF_PROGRESS2,1) CALL WDIALOGRANGEPROGRESSBAR(IDF_PROGRESS1,0,NG); CALL WDIALOGPUTPROGRESSBAR(IDF_PROGRESS1,0,METHOD=ABSOLUTE) !## allocate graph memory CALL GRAPH_DEALLOCATE(); CALL GRAPH_ALLOCATE(M,NG) !## if selected precipitation/evaporation CALL WDIALOGSELECT(ID_DMSPANALYSER_TAB5) !## get file type 1=ascii 2=ascii->idf 3=idf CALL WDIALOGGETMENU(IDF_MENU3,FTYPE) !## get file type 1=png 2=bmp 3=jpg CALL WDIALOGGETMENU(IDF_MENU4,STYPE) !## number graphs NG=0 DO I=3,SIZE(METEGRID%IACT) IF(METEGRID%IACT(I).EQ.0.OR.METEGRID%GRAPH(I).NE.1)CYCLE !## get row/column number CALL WDIALOGSELECT(ID_DMSPANALYSER_TAB2); CALL UTL_DEBUGLEVEL(0) IROW=-1; ICOL=-1 IF(I.EQ.3)THEN CALL WGRIDGETCELLINTEGER(IDF_GRID4,2,1,IROW) CALL WGRIDGETCELLINTEGER(IDF_GRID4,3,1,ICOL) ELSEIF(I.EQ.4)THEN CALL WGRIDGETCELLINTEGER(IDF_GRID5,2,1,IROW) CALL WGRIDGETCELLINTEGER(IDF_GRID5,3,1,ICOL) ENDIF CALL UTL_DEBUGLEVEL(0) IF(IROW.LE.0.OR.ICOL.LE.0)THEN CALL WMESSAGEBOX(OKONLY,EXCLAMATIONICON,COMMONOK,'iMOD cannot find an appropriate column/row number','Error'); RETURN ENDIF NG=NG+1 N=0; DO J=1,METEGRID%MXID !## stop IF(METEGRID%INFO(J)%JD.GT.UTL_IDATETOJDATE(MSPEDATE))EXIT IF(METEGRID%INFO(J)%JD.GE.UTL_IDATETOJDATE(MSPSDATE))N=N+1 ENDDO ALLOCATE(GRAPH(M,NG)%RX(N),GRAPH(M,NG)%RY(N)) GRAPH(M,NG)%NP=N GRAPH(M,NG)%CTYPE='' IF(I.EQ.1)GRAPH(M,NG)%ICLR=WRGB(0,0,255) IF(I.EQ.2)GRAPH(M,NG)%ICLR=WRGB(200,0,0) GRAPH(M,NG)%GTYPE=1 GRAPH(M,NG)%LEGTXT=TRIM(METEGRID%LABEL(I)) GRAPHDIM(NG)%GRAPHNAMES=TRIM(METEGRID%LABEL(I)) GRAPHDIM(NG)%XTITLE='Date' GRAPHDIM(NG)%YTITLE=TRIM(METEGRID%LABEL(I))//' '//TRIM(METEGRID%UNIT(I)) GRAPHDIM(NG)%LDATE=.TRUE. GRAPHDIM(NG)%IGROUP=NG GRAPHDIM(NG)%TEXTSIZE=5.0D0 CALL WDIALOGSELECT(ID_DMSPANALYSER_TAB3) CALL WDIALOGPUTPROGRESSBAR(IDF_PROGRESS1,NG,METHOD=ABSOLUTE) CALL WDIALOGRANGEPROGRESSBAR(IDF_PROGRESS2,1,METEGRID%MXID); CALL WDIALOGPUTPROGRESSBAR(IDF_PROGRESS2,0,METHOD=ABSOLUTE) N=0; DO J=1,METEGRID%MXID CALL WMESSAGEPEEK(ITYPE,MESSAGE) CALL WDIALOGSELECT(ID_DMSPANALYSER_TAB3) CALL WDIALOGPUTPROGRESSBAR(IDF_PROGRESS2,J,METHOD=ABSOLUTE) !## stop IF(METEGRID%INFO(J)%JD.GT.UTL_IDATETOJDATE(MSPEDATE))EXIT IF(METEGRID%INFO(J)%JD.GE.UTL_IDATETOJDATE(MSPSDATE))THEN SELECT CASE (FTYPE) !## ascii CASE (1) IF(I.EQ.3)CALL ASC2IDF_IMPORTASC(METEGRID%INFO(J)%PRECGRID ,0.0D0,0.0D0,IERROR,0,IDFIMPORT=METEO) IF(I.EQ.4)CALL ASC2IDF_IMPORTASC(METEGRID%INFO(J)%ETREFGRID,0.0D0,0.0D0,IERROR,0,IDFIMPORT=METEO) IF(IERROR.EQ.1)RETURN; XV=METEO%X(ICOL,IROW) !## ascii->idf CASE (2) IF(I.EQ.3)CALL ASC2IDF_IMPORTASC(METEGRID%INFO(J)%PRECGRID ,0.0D0,0.0D0,IERROR,0) IF(I.EQ.4)CALL ASC2IDF_IMPORTASC(METEGRID%INFO(J)%ETREFGRID,0.0D0,0.0D0,IERROR,0) IF(IERROR.EQ.1)RETURN; FTYPE=-1*FTYPE END SELECT SELECT CASE (FTYPE) !## asc->idf, idf CASE (-2,3) IF(I.EQ.3)METEO%FNAME=METEGRID%INFO(J)%PRECGRID( :INDEX(METEGRID%INFO(J)%PRECGRID,'.',.TRUE. )-1)//'.IDF' IF(I.EQ.4)METEO%FNAME=METEGRID%INFO(J)%ETREFGRID(:INDEX(METEGRID%INFO(J)%ETREFGRID,'.',.TRUE.)-1)//'.IDF' IF(.NOT.IDFREAD(METEO,METEO%FNAME,0))RETURN; XV=IDFGETVAL(METEO,IROW,ICOL); CLOSE(METEO%IU) END SELECT !## fill in values N=N+1 !## precipitation/evaporation GRAPH(M,NG)%RX(N)=DBLE(METEGRID%INFO(J)%JD) GRAPH(M,NG)%RY(N)=XV FTYPE=ABS(FTYPE) ENDIF ENDDO ENDDO !## if precipitation/evaporation is there, use dates, otherwise day-number LDATE=.FALSE.; IF(NG.GT.0)LDATE=.TRUE. !## get current landuse READ(LUSESVAT%INSPVAL(3),*,IOSTAT=IOS) IVEGTYPE IF(IOS.NE.0)THEN CALL WMESSAGEBOX(OKONLY,EXCLAMATIONICON,COMMONOK,'You need to apply the Inspector first','Error'); RETURN ENDIF DO I=1,SIZE(FACTSVAT%IACT) IF(FACTSVAT%IACT(I).EQ.0.OR.FACTSVAT%GRAPH(I).NE.1)CYCLE NG=NG+1 !## get appropriate offset for landuse type I1=0; I2=0; DO II=1,SIZE(FACTSVAT%INFO) IF(I1.EQ.0.AND.IVEGTYPE.EQ.FACTSVAT%INFO(II)%VG)I1=II IF(I1.NE.0.AND.IVEGTYPE.NE.FACTSVAT%INFO(II)%VG)THEN; I2=II-1; EXIT; ENDIF ENDDO IF(I1.EQ.0)THEN; CALL WMESSAGEBOX(OKONLY,EXCLAMATIONICON,COMMONOK,'iMOD cannot find the croptype '//TRIM(ITOS(IVEGTYPE)),'Error'); RETURN; ENDIF !## allocate size of precipitation/evaporation graph - if allready there - if not take entire serie IF(NG.GT.1)THEN N=SIZE(GRAPH(M,1)%RX) ELSE N=(I2-I1)+1 ENDIF ALLOCATE(GRAPH(M,NG)%RX(N),GRAPH(M,NG)%RY(N)) GRAPH(M,NG)%NP=N GRAPH(M,NG)%CTYPE='' GRAPH(M,NG)%ICLR=WRGB(0,255,0) GRAPH(M,NG)%GTYPE=2 GRAPH(M,NG)%LEGTXT=TRIM(FACTSVAT%LABEL(I)) GRAPHDIM(NG)%GRAPHNAMES=TRIM(FACTSVAT%LABEL(I)) !'Graph '//TRIM(ITOS(NG)) IF(LDATE) GRAPHDIM(NG)%XTITLE='Date' IF(.NOT.LDATE)GRAPHDIM(NG)%XTITLE='Day number' GRAPHDIM(NG)%YTITLE=TRIM(FACTSVAT%LABEL(I))//' '//TRIM(FACTSVAT%UNIT(I)) GRAPHDIM(NG)%LDATE=LDATE GRAPHDIM(NG)%IGROUP=NG GRAPHDIM(NG)%TEXTSIZE=5.0D0 CALL WDIALOGSELECT(ID_DMSPANALYSER_TAB3) CALL WDIALOGPUTPROGRESSBAR(IDF_PROGRESS1,NG,METHOD=ABSOLUTE) CALL WDIALOGRANGEPROGRESSBAR(IDF_PROGRESS2,1,N); CALL WDIALOGPUTPROGRESSBAR(IDF_PROGRESS2,0,METHOD=ABSOLUTE) !## get appropriate start moment for factsvat-entries IF(LDATE)THEN JDATE=INT(GRAPH(M,1)%RX(1)) II=I1+UTL_GETDAYNUMBERFROMJD(JDATE)-1 ELSE II=I1-1 ENDIF !## fill in series DO J=1,N CALL WDIALOGSELECT(ID_DMSPANALYSER_TAB3) CALL WDIALOGPUTPROGRESSBAR(IDF_PROGRESS2,0,METHOD=ABSOLUTE) II=II+1 IF(II.GT.I2)THEN IF(LDATE)THEN JDATE=INT(GRAPH(M,1)%RX(1)) II=I1+UTL_GETDAYNUMBERFROMJD(JDATE) ELSE II=I1 ENDIF ENDIF SELECT CASE (I) CASE (1); XV=FACTSVAT%INFO(II)%VG CASE (2); XV=FACTSVAT%INFO(II)%DY CASE (3); XV=FACTSVAT%INFO(II)%CSVG CASE (4); XV=FACTSVAT%INFO(II)%LAIVG CASE (5); XV=FACTSVAT%INFO(II)%VXICVG CASE (6); XV=FACTSVAT%INFO(II)%FAEVVG CASE (7); XV=FACTSVAT%INFO(II)%FAEIVG CASE (8); XV=FACTSVAT%INFO(II)%FAEBSVG CASE (9); XV=FACTSVAT%INFO(II)%FAEPDVG CASE (10); XV=FACTSVAT%INFO(II)%CHVG CASE (11); XV=FACTSVAT%INFO(II)%DRPZVG END SELECT IF(LDATE) GRAPH(M,NG)%RX(J)=GRAPH(M,1)%RX(J) !DBLE(METEGRID%INFO(J)%JD) IF(.NOT.LDATE)GRAPH(M,NG)%RX(J)=DBLE(J) GRAPH(M,NG)%RY(J)=XV ENDDO ENDDO WID=WINFODIALOG(CURRENTDIALOG) !## add custom predefined axes titles GRAPHDIM%IFIXX=0; GRAPHDIM%IFIXY=0 !## start graph CALL GRAPH_INIT(2,LMULT=.TRUE.,SUBTITLE='svat-nr: '//TRIM(AREASVAT%INSPVAL(1))//', landuse-nr: '//TRIM(AREASVAT%INSPVAL(6))) !CALL WBitmapSave(IHANDLE,'image.png') CALL WDIALOGSELECT(WID) END SUBROUTINE MSPINSPECTOR_TAB3_GRAPH !###====================================================================== SUBROUTINE MSPINSPECTOR_TAB3_CREATEIDF() !###====================================================================== IMPLICIT NONE INTEGER :: I,J,JJ,JCOL,JROW,ILAY,NLAY,JSVAT,NPRGS,IPRGS,MFID INTEGER :: DROW,DCOL ! offset of Modflow window compared to MetaSWAP winoow TYPE(IDFOBJ) :: MSPLUSE,MSPMFID LOGICAL :: LEX !## open progress bar NPRGS= 10 CALL WDIALOGLOAD(ID_DIRPROGRESS,ID_DIRPROGRESS) CALL WDIALOGSELECT(ID_DIRPROGRESS) CALL WDIALOGPUTSTRING(IDF_GROUP1,'Creating IDF files') CALL WDIALOGRANGEPROGRESSBAR(IDF_PROGRESS1,0,NPRGS) CALL WDIALOGPUTPROGRESSBAR(IDF_PROGRESS1,0,ABSOLUTE) CALL UTL_DIALOGSHOW(-1,-1,0,3) IPRGS=0 IPRGS=IPRGS+1 ; CALL WDIALOGSELECT(ID_DIRPROGRESS) ; CALL WDIALOGPUTPROGRESSBAR(IDF_PROGRESS1,IPRGS,0) CALL WDIALOGSELECT(ID_DIRPROGRESS); CALL WDIALOGPUTSTRING(IDF_LABEL1,'FILE SVAT_RURAL.IDF...') ; IF(.NOT.IDFWRITE(SVATRU,TRIM(ROOT)//'\'//TRIM(MNAME)//'\METASWAP\SVAT_RURAL.IDF',1))THEN ; ENDIF CALL WDIALOGSELECT(ID_DIRPROGRESS); CALL WDIALOGPUTSTRING(IDF_LABEL1,'FILE SVAT_URBAN.IDF...') ; IF(.NOT.IDFWRITE(SVATUR,TRIM(ROOT)//'\'//TRIM(MNAME)//'\METASWAP\SVAT_URBAN.IDF',1))THEN ; ENDIF CALL WDIALOGSELECT(ID_DIRPROGRESS); CALL WDIALOGPUTSTRING(IDF_LABEL1,'FILE SVAT_IRRIGATION.IDF...') ; IF(.NOT.IDFWRITE(SVATIR,TRIM(ROOT)//'\'//TRIM(MNAME)//'\METASWAP\SVAT_IRRIGATION.IDF',1))THEN ; ENDIF !CALL WDIALOGSELECT(ID_DIRPROGRESS); CALL WDIALOGPUTSTRING(IDF_LABEL1,'FILE SVAT_IRRIGATION-SOURCE.IDF...') ; IF(.NOT.IDFWRITE(SVATIRS,TRIM(ROOT)//'\'//TRIM(MNAME)//'\METASWAP\SVAT_IRRIGATION-SOURCE.IDF',1))THEN ; ENDIF !CALL WDIALOGSELECT(ID_DIRPROGRESS); CALL WDIALOGPUTSTRING(IDF_LABEL1,'FILE SCAP_SVAT_LAY.IDF...') ; IF(.NOT.IDFWRITE(SCAPSVAT_LYAB,TRIM(ROOT)//'\'//TRIM(MNAME)//'\METASWAP\SCAP_SVAT_LAY.IDF',1))THEN ; ENDIF CALL MANAGER_UTL_ADDFILE(IDFNAMEGIVEN=TRIM(ROOT)//'\'//TRIM(MNAME)//'\METASWAP\SVAT_RURAL.idf') CALL MANAGER_UTL_ADDFILE(IDFNAMEGIVEN=TRIM(ROOT)//'\'//TRIM(MNAME)//'\METASWAP\SVAT_URBAN.idf') CALL MANAGER_UTL_ADDFILE(IDFNAMEGIVEN=TRIM(ROOT)//'\'//TRIM(MNAME)//'\METASWAP\SVAT_IRRIGATION.idf') !CALL MANAGER_UTL_ADDFILE(IDFNAMEGIVEN=TRIM(ROOT)//'\'//TRIM(MNAME)//'\METASWAP\SVAT_IRRIGATION-SOURCE.idf') !## landuse CALL IDFCOPY(MSPIDF,MSPLUSE) CALL WDIALOGSELECT(ID_DIRPROGRESS); CALL WDIALOGPUTSTRING(IDF_LABEL1,'create MSPLUSE.idf...') JJ=1 ; IPRGS=0 DO I=1,AREASVAT%MXID IF(INT(I*NPRGS/AREASVAT%MXID).GT.IPRGS) THEN ; IPRGS = INT(I*NPRGS/AREASVAT%MXID) ; CALL WDIALOGSELECT(ID_DIRPROGRESS) ; CALL WDIALOGPUTPROGRESSBAR(IDF_PROGRESS1,IPRGS,ABSOLUTE) ; ENDIF J=AREASVAT%INFO(I)%REC_IDFSVAT IF(J.GT.0)THEN JROW=IDFSVAT%INFO(J)%ROW JCOL=IDFSVAT%INFO(J)%COL IF(MSPLUSE%X(JCOL,JROW).EQ.0) MSPLUSE%X(JCOL,JROW)=AREASVAT%INFO(I)%LUSE ENDIF ENDDO FNAME=TRIM(ROOT)//'\'//TRIM(MNAME)//'\METASWAP\MSPLUSE.idf' ; IF(.NOT.IDFWRITE(MSPLUSE,FNAME,1))THEN ; ENDIF ; CALL MANAGER_UTL_ADDFILE(IDFNAMEGIVEN=FNAME) CALL IDFDEALLOCATEX(MSPLUSE) !## Meteo CALL WDIALOGSELECT(ID_DIRPROGRESS); CALL WDIALOGPUTSTRING(IDF_LABEL1,'save METEO_DIM.idf...') IF(.NOT.IDFWRITE(METEO,TRIM(ROOT)//'\'//TRIM(MNAME)//'\METEO_DIM.idf',1))THEN ; ENDIF !## MODFLOW ID per layer CALL WDIALOGSELECT(ID_DIRPROGRESS); CALL WDIALOGPUTSTRING(IDF_LABEL1,'create IDF Modflow ID per layer...') ; CALL WDIALOGPUTPROGRESSBAR(IDF_PROGRESS1,3,ABSOLUTE) CALL IDFCOPY(MSPIDF,MSPMFID) NLAY=MAXVAL(MODSVAT%INFO%LY) !## get offset ModflowWINDOW JSVAT=IDFSVAT%INFO(1)%SVAT CALL MSPINSPECTOR_SVAT2ROWCOL(JSVAT,JROW,JCOL,MFID) CALL MSPINSPECTOR_MFID2LAYROWCOL(MFID,ILAY,JROW,JCOL) DROW=JROW-1 ; DCOL=JCOL-1 DO ILAY=1,NLAY FNAME=TRIM(ROOT)//'\'//TRIM(MNAME)//'\METASWAP\ModflowID_L'//TRIM(ITOS(ILAY))//'.idf' CALL WDIALOGSELECT(ID_DIRPROGRESS); CALL WDIALOGPUTSTRING(IDF_LABEL1,'create '//TRIM(FNAME)) IPRGS=0 LEX=.FALSE. MSPMFID%X=MSPMFID%NODATA DO I=1,MODSVAT%MXID IF(INT(I*NPRGS/MODSVAT%MXID).GT.IPRGS) THEN ; IPRGS = INT(I*NPRGS/MODSVAT%MXID) ; CALL WDIALOGSELECT(ID_DIRPROGRESS) ; CALL WDIALOGPUTPROGRESSBAR(IDF_PROGRESS1,IPRGS,ABSOLUTE) ; ENDIF IF(ILAY.EQ.MODSVAT%INFO(I)%LY)THEN MFID=MODSVAT%INFO(I)%MFID !# assumption: DXC is complete and sorted. MFID is also record number !CALL MSPINSPECTOR_MFID2LAYROWCOL(MFID,J,JROW,JCOL) JROW=DXC%INFO(MFID)%IROW JCOL=DXC%INFO(MFID)%ICOL IF(IDFCHECKRC(MSPMFID,JROW-DROW,JCOL-DCOL))THEN MSPMFID%X(JCOL-DCOL,JROW-DROW)=MFID LEX=.TRUE. ENDIF ENDIF ENDDO IF(LEX)THEN IF(.NOT.IDFWRITE(MSPMFID,FNAME,1))THEN ; ENDIF !; CALL MANAGER_UTL_ADDFILE(IDFNAMEGIVEN=FNAME) ENDIF ENDDO CALL IDFDEALLOCATEX(MSPMFID) CALL WDIALOGSELECT(ID_DIRPROGRESS); CALL WDIALOGUNLOAD() END SUBROUTINE MSPINSPECTOR_TAB3_CREATEIDF !###====================================================================== SUBROUTINE MSPINSPECTOR_TAB4(ITYPE,MESSAGE) !###====================================================================== IMPLICIT NONE TYPE(WIN_MESSAGE),INTENT(INOUT) :: MESSAGE INTEGER,INTENT(IN) :: ITYPE SELECT CASE (ITYPE) !## case field changed CASE (FIELDCHANGED) CALL MSPINSPECTOR_TAB4_FIELDS() !## pushbutton CASE (PUSHBUTTON) IF(MESSAGE%VALUE1.EQ.MESSAGE%VALUE2)THEN SELECT CASE (MESSAGE%VALUE1) !## switch Irrigation source/target on/off CASE (IDF_CHECK1) !## Check if Inspector has selected a cell, which cell CALL WDIALOGSELECT(ID_DMSPANALYSER_TAB2) IF(WInfoGridCell(IDF_GRID2,2,1,1).EQ.1)THEN MOUSEROW=0 ; MOUSECOL=0 CALL WGRIDGETCELLINTEGER(IDF_GRID2,2,1,MOUSEROW) CALL WGRIDGETCELLINTEGER(IDF_GRID2,3,1,MOUSECOL) !## if cell is selected put parameter values for all grids IF(MOUSECOL*MOUSEROW.NE.0) CAll MSPINSPECTOR_GETXY_PUTVALUES(MOUSEROW,MOUSECOL) ENDIF END SELECT ENDIF END SELECT END SUBROUTINE MSPINSPECTOR_TAB4 !###====================================================================== SUBROUTINE MSPINSPECTOR_TAB5(ITYPE,MESSAGE) !###====================================================================== IMPLICIT NONE TYPE(WIN_MESSAGE),INTENT(INOUT) :: MESSAGE INTEGER,INTENT(IN) :: ITYPE SELECT CASE (ITYPE) !## case field changed CASE (FIELDCHANGED) IF(MESSAGE%VALUE1.EQ.MESSAGE%VALUE2)THEN SELECT CASE (MESSAGE%VALUE1) CASE (IDF_RADIO1,IDF_RADIO2,IDF_INTEGER2,IDF_MENU5,IDF_INTEGER1,IDF_INTEGER12,IDF_MENU6,IDF_INTEGER11) CALL MSPINSPECTOR_TAB5_FIELDS() CASE (IDF_MENU1) CALL MSPINSPECTOR_TAB5_PUTPARAMLIST() CASE (IDF_MENU2) CALL MSPINSPECTOR_TAB5_GETPARAMLIST() CALL MSPINSPECTOR_TAB3_PUTPARAMLIST() END SELECT ENDIF !## pushbutton CASE (PUSHBUTTON) SELECT CASE (MESSAGE%VALUE1) !## load and save of settings file CASE (ID_OPEN,ID_SAVE) CALL MSPINSPECTOR_TAB5_SETTINGS(MESSAGE%VALUE1) CALL MSPINSPECTOR_TAB3_PUTPARAMLIST() END SELECT END SELECT END SUBROUTINE MSPINSPECTOR_TAB5 !###====================================================================== SUBROUTINE MSPINSPECTOR_TAB5_SETTINGS(CODE,FNAME) !###====================================================================== IMPLICIT NONE INTEGER,INTENT(IN) :: CODE CHARACTER(LEN=*),INTENT(IN),OPTIONAL :: FNAME CHARACTER(LEN=256) :: NAMES INTEGER :: IU,ILIST,I LOGICAL :: LEX !## save IF(CODE.EQ.ID_SAVE)THEN IF(.NOT.PRESENT(FNAME))THEN NAMES=TRIM(PREFVAL(1))//'\settings\*.ims' IF(.NOT.UTL_WSELECTFILE('iMOD metaSWAP Settings File (*.ims)|*.ims|',& SAVEDIALOG+PROMPTON+DIRCHANGE+APPENDEXT,NAMES,& 'Save metaSWAP Settings File (*.ims)'))RETURN ELSE NAMES=FNAME ENDIF IU=UTL_GETUNIT() CALL OSD_OPEN(IU,FILE=NAMES,STATUS='UNKNOWN') WRITE(IU,'(A)') 'Settings file for the metaSWAP analyser containing KEY words' WRITE(IU,'(/A)') ' ******* File settings *******' CALL WDIALOGSELECT(ID_DMSPANALYSER_TAB5) CALL WDIALOGGETMENU(IDF_MENU3,ILIST) WRITE(IU,'(A)') 'METEO= '//TRIM(ITOS(ILIST))//' !## Handling Meteo Data' CALL WDIALOGGETMENU(IDF_MENU4,ILIST) WRITE(IU,'(A)') 'SCREENDUMP= '//TRIM(ITOS(ILIST))//' !## Screendump format' WRITE(IU,'(/A)') ' ******* Date settings *******' CALL WDIALOGGETINTEGER(IDF_INTEGER1,ILIST) WRITE(IU,'(A)') 'SDAY= '//TRIM(ITOS(ILIST))//' !## Start Day' CALL WDIALOGGETMENU(IDF_MENU5,ILIST) WRITE(IU,'(A)') 'SMONTH= '//TRIM(ITOS(ILIST))//' !## Start Month' CALL WDIALOGGETINTEGER(IDF_INTEGER2,ILIST) WRITE(IU,'(A)') 'SYEAR= '//TRIM(ITOS(ILIST))//' !## Start Year' CALL WDIALOGGETINTEGER(IDF_INTEGER11,ILIST) WRITE(IU,'(A)') 'EDAY= '//TRIM(ITOS(ILIST))//' !## End Day' CALL WDIALOGGETMENU(IDF_MENU6,ILIST) WRITE(IU,'(A)') 'EMONTH= '//TRIM(ITOS(ILIST))//' !## End Month' CALL WDIALOGGETINTEGER(IDF_INTEGER12,ILIST) WRITE(IU,'(A)') 'EYEAR= '//TRIM(ITOS(ILIST))//' !## End Year' WRITE(IU,'(/A)') ' ******* Parameter settings *******' !## NB this block changes whenever order MSFILES changes! DO I=1,SIZE(DXC%IACT) ; WRITE(IU,'(A)') TRIM(MSFILES(1))//'_'//TRIM(ITOS(I))//' = '//TRIM(ITOS(DXC%IACT(I))) //' !## '//TRIM(DXC%LABEL(I)) ; END DO DO I=1,SIZE(MODSVAT%IACT) ; WRITE(IU,'(A)') TRIM(MSFILES(2))//'_'//TRIM(ITOS(I))//' = '//TRIM(ITOS(MODSVAT%IACT(I))) //' !## '//TRIM(MODSVAT%LABEL(I)) ; END DO DO I=1,SIZE(IDFSVAT%IACT) ; WRITE(IU,'(A)') TRIM(MSFILES(3))//'_'//TRIM(ITOS(I))//' = '//TRIM(ITOS(IDFSVAT%IACT(I))) //' !## '//TRIM(IDFSVAT%LABEL(I)) ; END DO DO I=1,SIZE(AREASVAT%IACT) ; WRITE(IU,'(A)') TRIM(MSFILES(4))//'_'//TRIM(ITOS(I))//' = '//TRIM(ITOS(AREASVAT%IACT(I)))//' !## '//TRIM(AREASVAT%LABEL(I)) ; END DO DO I=1,SIZE(LUSESVAT%IACT) ; WRITE(IU,'(A)') TRIM(MSFILES(5))//'_'//TRIM(ITOS(I))//' = '//TRIM(ITOS(LUSESVAT%IACT(I)))//' !## '//TRIM(LUSESVAT%LABEL(I)) ; END DO DO I=1,SIZE(FACTSVAT%IACT) ; WRITE(IU,'(A)') TRIM(MSFILES(6))//'_'//TRIM(ITOS(I))//' = '//TRIM(ITOS(FACTSVAT%IACT(I)))//' !## '//TRIM(FACTSVAT%LABEL(I)) ; END DO DO I=1,SIZE(INFISVAT%IACT) ; WRITE(IU,'(A)') TRIM(MSFILES(7))//'_'//TRIM(ITOS(I))//' = '//TRIM(ITOS(INFISVAT%IACT(I)))//' !## '//TRIM(INFISVAT%LABEL(I)) ; END DO DO I=1,SIZE(SCAPSVAT%IACT) ; WRITE(IU,'(A)') TRIM(MSFILES(8))//'_'//TRIM(ITOS(I))//' = '//TRIM(ITOS(SCAPSVAT%IACT(I)))//' !## '//TRIM(SCAPSVAT%LABEL(I)) ; END DO DO I=1,SIZE(METEGRID%IACT) ; WRITE(IU,'(A)') TRIM(MSFILES(9))//'_'//TRIM(ITOS(I))//' = '//TRIM(ITOS(METEGRID%IACT(I)))//' !## '//TRIM(METEGRID%LABEL(I)) ; END DO DO I=1,SIZE(SVATPREC%IACT) ; WRITE(IU,'(A)') TRIM(MSFILES(10))//'_'//TRIM(ITOS(I))//' = '//TRIM(ITOS(SVATPREC%IACT(I)))//' !## '//TRIM(SVATPREC%LABEL(I)) ; END DO DO I=1,SIZE(SVATETREF%IACT); WRITE(IU,'(A)') TRIM(MSFILES(11))//'_'//TRIM(ITOS(I))//' = '//TRIM(ITOS(SVATETREF%IACT(I)))//' !## '//TRIM(SVATETREF%LABEL(I)) ; END DO DO I=1,SIZE(SVAT2SWNRROFF%IACT); WRITE(IU,'(A)') TRIM(MSFILES(12))//'_'//TRIM(ITOS(I))//' = '//TRIM(ITOS(SVAT2SWNRROFF%IACT(I)))//' !## '//TRIM(SVAT2SWNRROFF%LABEL(I)) ; END DO CLOSE(IU) !## read ELSEIF(CODE.EQ.ID_OPEN)THEN IF(.NOT.PRESENT(FNAME))THEN NAMES=TRIM(PREFVAL(1))//'\settings\*.ims' IF(.NOT.UTL_WSELECTFILE('iMOD metaSWAP Settings File (*.ims)|*.ims|',& LOADDIALOG+MUSTEXIST+PROMPTON+DIRCHANGE+APPENDEXT+MULTIFILE,NAMES,& 'Load metaSWAP Settings File (*.ims)'))RETURN ELSE NAMES=FNAME INQUIRE(FILE=NAMES,EXIST=LEX) IF(.NOT.LEX)RETURN ENDIF IU=UTL_GETUNIT() CALL OSD_OPEN(IU,FILE=NAMES,STATUS='UNKNOWN') CALL WDIALOGSELECT(ID_DMSPANALYSER_TAB5) IF(UTL_READINITFILE('METEO',LINE,IU,1)) READ(LINE,*) ILIST ; CALL WDIALOGPUTOPTION(IDF_MENU3,ILIST) IF(UTL_READINITFILE('SCREENDUMP',LINE,IU,1)) READ(LINE,*) ILIST ; CALL WDIALOGPUTOPTION(IDF_MENU4,ILIST) IF(UTL_READINITFILE('SDAY',LINE,IU,1)) READ(LINE,*) ILIST ; CALL WDIALOGPUTINTEGER(IDF_INTEGER1,ILIST) IF(UTL_READINITFILE('SMONTH',LINE,IU,1)) READ(LINE,*) ILIST ; CALL WDIALOGPUTOPTION(IDF_MENU5,ILIST) IF(UTL_READINITFILE('SYEAR',LINE,IU,1)) READ(LINE,*) ILIST ; CALL WDIALOGPUTINTEGER(IDF_INTEGER2,ILIST) IF(UTL_READINITFILE('EDAY',LINE,IU,1)) READ(LINE,*) ILIST ; CALL WDIALOGPUTINTEGER(IDF_INTEGER11,ILIST) IF(UTL_READINITFILE('EMONTH',LINE,IU,1)) READ(LINE,*) ILIST ; CALL WDIALOGPUTOPTION(IDF_MENU6,ILIST) IF(UTL_READINITFILE('EYEAR',LINE,IU,1)) READ(LINE,*) ILIST ; CALL WDIALOGPUTINTEGER(IDF_INTEGER12,ILIST) !## NB this block changes whenever order MSFILES changes! DO I=1,SIZE(DXC%IACT) ; IF(UTL_READINITFILE(TRIM(MSFILES(1))//'_'//TRIM(ITOS(I)),LINE,IU,1)) READ(LINE,*) DXC%IACT(I) ; END DO DO I=1,SIZE(MODSVAT%IACT) ; IF(UTL_READINITFILE(TRIM(MSFILES(2))//'_'//TRIM(ITOS(I)),LINE,IU,1)) READ(LINE,*) MODSVAT%IACT(I) ; END DO DO I=1,SIZE(IDFSVAT%IACT) ; IF(UTL_READINITFILE(TRIM(MSFILES(3))//'_'//TRIM(ITOS(I)),LINE,IU,1)) READ(LINE,*) IDFSVAT%IACT(I) ; END DO DO I=1,SIZE(AREASVAT%IACT) ; IF(UTL_READINITFILE(TRIM(MSFILES(4))//'_'//TRIM(ITOS(I)),LINE,IU,1)) READ(LINE,*) AREASVAT%IACT(I) ; END DO DO I=1,SIZE(LUSESVAT%IACT) ; IF(UTL_READINITFILE(TRIM(MSFILES(5))//'_'//TRIM(ITOS(I)),LINE,IU,1)) READ(LINE,*) LUSESVAT%IACT(I) ; END DO DO I=1,SIZE(FACTSVAT%IACT) ; IF(UTL_READINITFILE(TRIM(MSFILES(6))//'_'//TRIM(ITOS(I)),LINE,IU,1)) READ(LINE,*) FACTSVAT%IACT(I) ; END DO DO I=1,SIZE(INFISVAT%IACT) ; IF(UTL_READINITFILE(TRIM(MSFILES(7))//'_'//TRIM(ITOS(I)),LINE,IU,1)) READ(LINE,*) INFISVAT%IACT(I) ; END DO DO I=1,SIZE(SCAPSVAT%IACT) ; IF(UTL_READINITFILE(TRIM(MSFILES(8))//'_'//TRIM(ITOS(I)),LINE,IU,1)) READ(LINE,*) SCAPSVAT%IACT(I) ; END DO DO I=1,SIZE(METEGRID%IACT) ; IF(UTL_READINITFILE(TRIM(MSFILES(9))//'_'//TRIM(ITOS(I)),LINE,IU,1)) READ(LINE,*) METEGRID%IACT(I) ; END DO DO I=1,SIZE(SVATPREC%IACT) ; IF(UTL_READINITFILE(TRIM(MSFILES(10))//'_'//TRIM(ITOS(I)),LINE,IU,1)) READ(LINE,*) SVATPREC%IACT(I) ; END DO DO I=1,SIZE(SVATETREF%IACT) ; IF(UTL_READINITFILE(TRIM(MSFILES(11))//'_'//TRIM(ITOS(I)),LINE,IU,1)) READ(LINE,*) SVATETREF%IACT(I) ; END DO DO I=1,SIZE(SVAT2SWNRROFF%IACT); IF(UTL_READINITFILE(TRIM(MSFILES(12))//'_'//TRIM(ITOS(I)),LINE,IU,1)) READ(LINE,*) SVAT2SWNRROFF%IACT(I) ; END DO CLOSE(IU) CALL MSPINSPECTOR_TAB5_PUTPARAMLIST ENDIF END SUBROUTINE MSPINSPECTOR_TAB5_SETTINGS !###====================================================================== SUBROUTINE MSPINSPECTOR_FILL_FOLDERLIST() !###====================================================================== IMPLICIT NONE INTEGER :: N,I CALL WDIALOGSELECT(ID_DMSPANALYSER_TAB1) CALL WDIALOGGETRADIOBUTTON(IDF_RADIO1,I) IF(I.EQ.1)THEN CALL WDIALOGGETSTRING(IDF_STRING1,ROOT) ELSE !## defaut root in iMOD is models ROOT=TRIM(PREFVAL(1))//'\MODELS' ENDIF CALL UTL_IMODFILLMENU(IDF_MENU1,TRIM(ROOT),'*','D',N,0,0) !## disable fields N=MAX(0,MIN(1,N)); CALL WDIALOGFIELDSTATE(ID_OPEN,N) END SUBROUTINE MSPINSPECTOR_FILL_FOLDERLIST !###====================================================================== SUBROUTINE MSPINSPECTOR_TAB3_PUTPARAMLIST() !###====================================================================== IMPLICIT NONE INTEGER :: N,I,J,K CALL WDIALOGSELECT(ID_DMSPANALYSER_TAB3) CALL WGRIDCLEAR(IDF_GRID1) !## Time dependant parameters: METEGRID (PRECGRID,ETREFGRID) / FACTSVAT (all) / LUSESVAT (Feddes Function?) / !## determine number of rows active DO K=1,2 N=0; J=0 ; TAB3GRIDSIZE=0 !## same order as in MSFILES DO I=1,SIZE(DXC%LABEL); IF(DXC%IACT(I).EQ.0)CYCLE ; N=N+1; J=J+1; IF(K.EQ.2)THEN ; CALL WGRIDPUTCELLSTRING(IDF_GRID1,1,J,DXC%LABEL(I)) ; CALL WGRIDPUTCELLSTRING(IDF_GRID1,3,J,DXC%UNIT(I)) ; CALL WGRIDPUTCELLOPTION(IDF_GRID1,4,J,0); ENDIF ; END DO DO I=1,SIZE(MODSVAT%LABEL); IF(MODSVAT%IACT(I).EQ.0)CYCLE ; N=N+1; J=J+1; IF(K.EQ.2)THEN ; CALL WGRIDPUTCELLSTRING(IDF_GRID1,1,J,MODSVAT%LABEL(I)) ; CALL WGRIDPUTCELLSTRING(IDF_GRID1,3,J,MODSVAT%UNIT(I)) ; CALL WGRIDPUTCELLOPTION(IDF_GRID1,4,J,0); ENDIF ; END DO DO I=1,SIZE(IDFSVAT%LABEL); IF(IDFSVAT%IACT(I).EQ.0)CYCLE ; N=N+1; J=J+1; IF(K.EQ.2)THEN ; CALL WGRIDPUTCELLSTRING(IDF_GRID1,1,J,IDFSVAT%LABEL(I)) ; CALL WGRIDPUTCELLSTRING(IDF_GRID1,3,J,IDFSVAT%UNIT(I)) ; CALL WGRIDPUTCELLOPTION(IDF_GRID1,4,J,0); ENDIF ; END DO DO I=1,SIZE(AREASVAT%LABEL); IF(AREASVAT%IACT(I).EQ.0)CYCLE ; N=N+1; J=J+1; IF(K.EQ.2)THEN ; CALL WGRIDPUTCELLSTRING(IDF_GRID1,1,J,AREASVAT%LABEL(I)); CALL WGRIDPUTCELLSTRING(IDF_GRID1,3,J,AREASVAT%UNIT(I)) ; CALL WGRIDPUTCELLOPTION(IDF_GRID1,4,J,0); ENDIF ; END DO DO I=1,SIZE(LUSESVAT%LABEL); IF(LUSESVAT%IACT(I).EQ.0)CYCLE ; N=N+1; J=J+1; IF(K.EQ.2)THEN ; CALL WGRIDPUTCELLSTRING(IDF_GRID1,1,J,LUSESVAT%LABEL(I)); CALL WGRIDPUTCELLSTRING(IDF_GRID1,3,J,LUSESVAT%UNIT(I)) ; CALL WGRIDPUTCELLOPTION(IDF_GRID1,4,J,0); ENDIF ; END DO DO I=1,SIZE(FACTSVAT%LABEL); IF(FACTSVAT%IACT(I).EQ.0)CYCLE ; N=N+1; J=J+1; IF(K.EQ.2)THEN ; CALL WGRIDPUTCELLSTRING(IDF_GRID1,1,J,FACTSVAT%LABEL(I)); CALL WGRIDPUTCELLSTRING(IDF_GRID1,3,J,FACTSVAT%UNIT(I)) CALL WGRIDSTATECELL(IDF_GRID1,4,J,MAX((0-FACTSVAT%GRAPH(I)),-1)+2) ; CALL WGRIDPUTCELLOPTION(IDF_GRID1,4,J,FACTSVAT%GRAPH(I)); ENDIF ; END DO DO I=1,SIZE(INFISVAT%LABEL); IF(INFISVAT%IACT(I).EQ.0)CYCLE ; N=N+1; J=J+1; IF(K.EQ.2)THEN ; CALL WGRIDPUTCELLSTRING(IDF_GRID1,1,J,INFISVAT%LABEL(I)); CALL WGRIDPUTCELLSTRING(IDF_GRID1,3,J,INFISVAT%UNIT(I)) ; CALL WGRIDPUTCELLOPTION(IDF_GRID1,4,J,0); ENDIF ; END DO DO I=1,SIZE(SCAPSVAT%LABEL); IF(SCAPSVAT%IACT(I).EQ.0)CYCLE ; N=N+1; J=J+1; IF(K.EQ.2)THEN ; CALL WGRIDPUTCELLSTRING(IDF_GRID1,1,J,SCAPSVAT%LABEL(I)); CALL WGRIDPUTCELLSTRING(IDF_GRID1,3,J,SCAPSVAT%UNIT(I)) ; CALL WGRIDPUTCELLOPTION(IDF_GRID1,4,J,0); ENDIF ; END DO DO I=1,SIZE(METEGRID%LABEL); IF(METEGRID%IACT(I).EQ.0)CYCLE ; N=N+1; J=J+1; IF(K.EQ.2)THEN ; CALL WGRIDPUTCELLSTRING(IDF_GRID1,1,J,METEGRID%LABEL(I)); CALL WGRIDPUTCELLSTRING(IDF_GRID1,3,J,METEGRID%UNIT(I)) ; CALL WGRIDSTATECELL(IDF_GRID1,4,J,MAX((0-METEGRID%GRAPH(I)),-1)+2) ; CALL WGRIDPUTCELLOPTION(IDF_GRID1,4,J,METEGRID%GRAPH(I)); ENDIF ; END DO DO I=1,SIZE(SVATPREC%LABEL); IF(SVATPREC%IACT(I).EQ.0)CYCLE ; N=N+1; J=J+1; IF(K.EQ.2)THEN ; CALL WGRIDPUTCELLSTRING(IDF_GRID1,1,J,SVATPREC%LABEL(I)); CALL WGRIDPUTCELLSTRING(IDF_GRID1,3,J,SVATPREC%UNIT(I)) ; CALL WGRIDPUTCELLOPTION(IDF_GRID1,4,J,0); ENDIF ; END DO DO I=1,SIZE(SVATETREF%LABEL); IF(SVATETREF%IACT(I).EQ.0)CYCLE ; N=N+1; J=J+1; IF(K.EQ.2)THEN ; CALL WGRIDPUTCELLSTRING(IDF_GRID1,1,J,SVATETREF%LABEL(I)); CALL WGRIDPUTCELLSTRING(IDF_GRID1,3,J,SVATETREF%UNIT(I)) ; CALL WGRIDPUTCELLOPTION(IDF_GRID1,4,J,0); ENDIF ; END DO DO I=1,SIZE(SVAT2SWNRROFF%LABEL); IF(SVAT2SWNRROFF%IACT(I).EQ.0)CYCLE ; N=N+1; J=J+1; IF(K.EQ.2)THEN ; CALL WGRIDPUTCELLSTRING(IDF_GRID1,1,J,SVAT2SWNRROFF%LABEL(I)) ; CALL WGRIDPUTCELLSTRING(IDF_GRID1,3,J,SVAT2SWNRROFF%UNIT(I)) ; CALL WGRIDPUTCELLOPTION(IDF_GRID1,4,J,0); ENDIF ; END DO TAB3GRIDSIZE=J IF(K.EQ.1) THEN ; CALL WGRIDROWS(IDF_GRID1,MAX(1,N)) ; CALL WGRIDSTATE(IDF_GRID1,4,DialogReadOnly) ; ENDIF ENDDO END SUBROUTINE MSPINSPECTOR_TAB3_PUTPARAMLIST !###====================================================================== SUBROUTINE MSPINSPECTOR_TAB3_PUTPARAMVALUE() !###====================================================================== IMPLICIT NONE INTEGER :: N,I,J,K CALL WDIALOGSELECT(ID_DMSPANALYSER_TAB3) !## Time dependant parameters: METEGRID (PRECGRID,ETREFGRID) / FACTSVAT (all) / LUSESVAT (Feddes Function?) / !## determine number of rows active DO K=1,2 N=0; J=0 ; TAB3GRIDSIZE=0 !## same order as in MSFILES DO I=1,SIZE(DXC%LABEL); IF(DXC%IACT(I).EQ.0)CYCLE ; N=N+1; J=J+1; IF(K.EQ.2) CALL WGRIDPUTCELLSTRING(IDF_GRID1,2,J,DXC%INSPVAL(I)) ; END DO DO I=1,SIZE(MODSVAT%LABEL); IF(MODSVAT%IACT(I).EQ.0)CYCLE ; N=N+1; J=J+1; IF(K.EQ.2) CALL WGRIDPUTCELLSTRING(IDF_GRID1,2,J,MODSVAT%INSPVAL(I)) ; END DO DO I=1,SIZE(IDFSVAT%LABEL); IF(IDFSVAT%IACT(I).EQ.0)CYCLE ; N=N+1; J=J+1; IF(K.EQ.2) CALL WGRIDPUTCELLSTRING(IDF_GRID1,2,J,IDFSVAT%INSPVAL(I)) ; END DO DO I=1,SIZE(AREASVAT%LABEL); IF(AREASVAT%IACT(I).EQ.0)CYCLE ; N=N+1; J=J+1; IF(K.EQ.2) CALL WGRIDPUTCELLSTRING(IDF_GRID1,2,J,AREASVAT%INSPVAL(I)) ; END DO DO I=1,SIZE(LUSESVAT%LABEL); IF(LUSESVAT%IACT(I).EQ.0)CYCLE ; N=N+1; J=J+1; IF(K.EQ.2) CALL WGRIDPUTCELLSTRING(IDF_GRID1,2,J,LUSESVAT%INSPVAL(I)) ; END DO DO I=1,SIZE(FACTSVAT%LABEL); IF(FACTSVAT%IACT(I).EQ.0)CYCLE ; N=N+1; J=J+1; IF(K.EQ.2) CALL WGRIDPUTCELLSTRING(IDF_GRID1,2,J,FACTSVAT%INSPVAL(I)) ; END DO DO I=1,SIZE(INFISVAT%LABEL); IF(INFISVAT%IACT(I).EQ.0)CYCLE ; N=N+1; J=J+1; IF(K.EQ.2) CALL WGRIDPUTCELLSTRING(IDF_GRID1,2,J,INFISVAT%INSPVAL(I)) ; END DO DO I=1,SIZE(SCAPSVAT%LABEL); IF(SCAPSVAT%IACT(I).EQ.0)CYCLE ; N=N+1; J=J+1; IF(K.EQ.2) CALL WGRIDPUTCELLSTRING(IDF_GRID1,2,J,SCAPSVAT%INSPVAL(I)) ; END DO DO I=1,SIZE(METEGRID%LABEL); IF(METEGRID%IACT(I).EQ.0)CYCLE ; N=N+1; J=J+1; IF(K.EQ.2) CALL WGRIDPUTCELLSTRING(IDF_GRID1,2,J,METEGRID%INSPVAL(I)) ; END DO DO I=1,SIZE(SVATPREC%LABEL); IF(SVATPREC%IACT(I).EQ.0)CYCLE ; N=N+1; J=J+1; IF(K.EQ.2) CALL WGRIDPUTCELLSTRING(IDF_GRID1,2,J,SVATPREC%INSPVAL(I)) ; END DO DO I=1,SIZE(SVATETREF%LABEL); IF(SVATETREF%IACT(I).EQ.0)CYCLE ; N=N+1; J=J+1; IF(K.EQ.2) CALL WGRIDPUTCELLSTRING(IDF_GRID1,2,J,SVATETREF%INSPVAL(I)); END DO DO I=1,SIZE(SVAT2SWNRROFF%LABEL); IF(SVAT2SWNRROFF%IACT(I).EQ.0)CYCLE ; N=N+1; J=J+1; IF(K.EQ.2) CALL WGRIDPUTCELLSTRING(IDF_GRID1,2,J,SVAT2SWNRROFF%INSPVAL(I)); END DO TAB3GRIDSIZE=J ! IF(K.EQ.1) THEN ; CALL WGRIDROWS(IDF_GRID1,MAX(1,N)) ; CALL WGRIDSTATE(IDF_GRID1,4,DialogReadOnly) ; ENDIF IF(K.EQ.1) THEN ; CALL WGRIDROWS(IDF_GRID1,MAX(1,N)) ; ENDIF ENDDO END SUBROUTINE MSPINSPECTOR_TAB3_PUTPARAMVALUE !###====================================================================== SUBROUTINE MSPINSPECTOR_TAB3_GETPARAMLIST() !###====================================================================== IMPLICIT NONE INTEGER :: N,I,J CALL WDIALOGSELECT(ID_DMSPANALYSER_TAB3) N=0; J=0 !## same order as in MSFILES !## get selection code for drawing graphs DO I=1,SIZE(DXC%LABEL); IF(DXC%IACT(I).EQ.0)CYCLE ; N=N+1; J=J+1; END DO DO I=1,SIZE(MODSVAT%LABEL); IF(MODSVAT%IACT(I).EQ.0)CYCLE ; N=N+1; J=J+1; END DO DO I=1,SIZE(IDFSVAT%LABEL); IF(IDFSVAT%IACT(I).EQ.0)CYCLE ; N=N+1; J=J+1; END DO DO I=1,SIZE(AREASVAT%LABEL); IF(AREASVAT%IACT(I).EQ.0)CYCLE ; N=N+1; J=J+1; END DO DO I=1,SIZE(LUSESVAT%LABEL); IF(LUSESVAT%IACT(I).EQ.0)CYCLE ; N=N+1; J=J+1; END DO DO I=1,SIZE(FACTSVAT%LABEL); IF(FACTSVAT%IACT(I).EQ.0)CYCLE ; N=N+1; J=J+1; CALL WGRIDGETCELLMENU(IDF_GRID1,4,J,FACTSVAT%GRAPH(I)); END DO DO I=1,SIZE(INFISVAT%LABEL); IF(INFISVAT%IACT(I).EQ.0)CYCLE ; N=N+1; J=J+1; END DO DO I=1,SIZE(SCAPSVAT%LABEL); IF(SCAPSVAT%IACT(I).EQ.0)CYCLE ; N=N+1; J=J+1; END DO DO I=1,SIZE(METEGRID%LABEL); IF(METEGRID%IACT(I).EQ.0)CYCLE ; N=N+1; J=J+1; CALL WGRIDGETCELLMENU(IDF_GRID1,4,J,METEGRID%GRAPH(I)); END DO DO I=1,SIZE(SVATPREC%LABEL); IF(SVATPREC%IACT(I).EQ.0)CYCLE ; N=N+1; J=J+1; END DO DO I=1,SIZE(SVATETREF%LABEL); IF(SVATETREF%IACT(I).EQ.0)CYCLE ; N=N+1; J=J+1; END DO DO I=1,SIZE(SVAT2SWNRROFF%LABEL); IF(SVAT2SWNRROFF%IACT(I).EQ.0)CYCLE ; N=N+1; J=J+1; END DO END SUBROUTINE MSPINSPECTOR_TAB3_GETPARAMLIST !###====================================================================== SUBROUTINE MSPINSPECTOR_TAB5_PUTPARAMLIST() !###====================================================================== IMPLICIT NONE INTEGER :: I CALL WDIALOGSELECT(ID_DMSPANALYSER_TAB5) CALL WDIALOGGETMENU(IDF_MENU1,I) SELECT CASE (I) !## NB this block changes whenever order MSFILES changes! CASE (1) CALL WDIALOGPUTMENU(IDF_MENU2,DXC%LABEL,SIZE(DXC%LABEL),DXC%IACT) CASE (2) CALL WDIALOGPUTMENU(IDF_MENU2,MODSVAT%LABEL,SIZE(MODSVAT%LABEL),MODSVAT%IACT) CASE (3) CALL WDIALOGPUTMENU(IDF_MENU2,IDFSVAT%LABEL,SIZE(IDFSVAT%LABEL),IDFSVAT%IACT) CASE (4) CALL WDIALOGPUTMENU(IDF_MENU2,AREASVAT%LABEL,SIZE(AREASVAT%LABEL),AREASVAT%IACT) CASE (5) CALL WDIALOGPUTMENU(IDF_MENU2,LUSESVAT%LABEL,SIZE(LUSESVAT%LABEL),LUSESVAT%IACT) CASE (6) CALL WDIALOGPUTMENU(IDF_MENU2,FACTSVAT%LABEL,SIZE(FACTSVAT%LABEL),FACTSVAT%IACT) CASE (7) CALL WDIALOGPUTMENU(IDF_MENU2,INFISVAT%LABEL,SIZE(INFISVAT%LABEL),INFISVAT%IACT) CASE (8) CALL WDIALOGPUTMENU(IDF_MENU2,SCAPSVAT%LABEL,SIZE(SCAPSVAT%LABEL),SCAPSVAT%IACT) CASE (9) CALL WDIALOGPUTMENU(IDF_MENU2,METEGRID%LABEL,SIZE(METEGRID%LABEL),METEGRID%IACT) CASE (10) CALL WDIALOGPUTMENU(IDF_MENU2,SVATPREC%LABEL,SIZE(SVATPREC%LABEL),SVATPREC%IACT) CASE (11) CALL WDIALOGPUTMENU(IDF_MENU2,SVATETREF%LABEL,SIZE(SVATETREF%LABEL),SVATETREF%IACT) CASE (12) CALL WDIALOGPUTMENU(IDF_MENU2,SVAT2SWNRROFF%LABEL,SIZE(SVAT2SWNRROFF%LABEL),SVAT2SWNRROFF%IACT) END SELECT CALL MSPINSPECTOR_TAB3_PUTPARAMLIST END SUBROUTINE MSPINSPECTOR_TAB5_PUTPARAMLIST !###====================================================================== SUBROUTINE MSPINSPECTOR_TAB5_GETPARAMLIST() !###====================================================================== IMPLICIT NONE INTEGER :: I CALL WDIALOGSELECT(ID_DMSPANALYSER_TAB5) CALL WDIALOGGETMENU(IDF_MENU1,I) SELECT CASE (I) !## NB this block changes whenever order MSFILES changes! CASE (1) CALL WDIALOGGETMENU(IDF_MENU2,DXC%IACT) CASE (2) CALL WDIALOGGETMENU(IDF_MENU2,MODSVAT%IACT) CASE (3) CALL WDIALOGGETMENU(IDF_MENU2,IDFSVAT%IACT) CASE (4) CALL WDIALOGGETMENU(IDF_MENU2,AREASVAT%IACT) CASE (5) CALL WDIALOGGETMENU(IDF_MENU2,LUSESVAT%IACT) CASE (6) CALL WDIALOGGETMENU(IDF_MENU2,FACTSVAT%IACT) CASE (7) CALL WDIALOGGETMENU(IDF_MENU2,INFISVAT%IACT) CASE (8) CALL WDIALOGGETMENU(IDF_MENU2,SCAPSVAT%IACT) CASE (9) CALL WDIALOGGETMENU(IDF_MENU2,METEGRID%IACT) CASE (10) CALL WDIALOGGETMENU(IDF_MENU2,SVATPREC%IACT) CASE (11) CALL WDIALOGGETMENU(IDF_MENU2,SVATETREF%IACT) CASE (12) CALL WDIALOGGETMENU(IDF_MENU2,SVAT2SWNRROFF%IACT) END SELECT END SUBROUTINE MSPINSPECTOR_TAB5_GETPARAMLIST !###====================================================================== LOGICAL FUNCTION MSPINSPECTOR_OPENFILES() !###====================================================================== IMPLICIT NONE INTEGER :: IU,I,N LOGICAL :: LEX MSPINSPECTOR_OPENFILES=.FALSE. !## get foldername CALL WDIALOGSELECT(ID_DMSPANALYSER_TAB1) CALL WDIALOGGETMENU(IDF_MENU1,I,CVALUE=MNAME) !## open progress bar CALL WDIALOGLOAD(ID_DIRPROGRESS,ID_DIRPROGRESS) CALL WDIALOGSELECT(ID_DIRPROGRESS) CALL WDIALOGPUTSTRING(IDF_GROUP1,'Progress Reading metaSWAP Files') CALL WDIALOGRANGEPROGRESSBAR(IDF_PROGRESS1,0,12) CALL WDIALOGPUTPROGRESSBAR(IDF_PROGRESS1,0,ABSOLUTE) CALL UTL_DIALOGSHOW(-1,-1,0,3) I=1 !## get modelname N=1; CALL UTL_IMODFILLMENU(0,TRIM(ROOT)//'\'//TRIM(MNAME)//'\MF2005_TMP','*.DXC','F',N,0,1) IF(N.EQ.1)THEN MFNAME=LISTNAME(1) ELSE CALL WMESSAGEBOX(OKONLY,EXCLAMATIONICON,COMMONOK,'iMOD cannot find file '//CHAR(13)//TRIM(ROOT)//'\'//TRIM(MNAME)//'\MF2005_TMP\*.DXC','Error'); RETURN ENDIF IF(ALLOCATED(LISTNAME))DEALLOCATE(LISTNAME) CALL MSPINSPECTOR_DEALLOCATE(); !## open files FNAME='\'//TRIM(MNAME)//'\MF2005_TMP\'//TRIM(MFNAME) I=I+1 ; CALL WDIALOGSELECT(ID_DIRPROGRESS) ; CALL WDIALOGPUTPROGRESSBAR(IDF_PROGRESS1,I,0) ; CALL WDIALOGPUTSTRING(IDF_LABEL1,TRIM(FNAME)) IF(.NOT.MSPINSPECTOR_OPENFILES_DXC(IU))THEN INQUIRE(UNIT=IU,OPENED=LEX); IF(LEX)CLOSE(IU) CALL WMESSAGEBOX(OKONLY,EXCLAMATIONICON,COMMONOK,'iMOD cannot open file '//CHAR(13)//TRIM(ROOT)//TRIM(FNAME),'Error'); RETURN ENDIF FNAME='\'//TRIM(MNAME)//'\METASWAP\AREA_SVAT.INP' I=I+1 ; CALL WDIALOGSELECT(ID_DIRPROGRESS) ; CALL WDIALOGPUTPROGRESSBAR(IDF_PROGRESS1,I,0) ; CALL WDIALOGPUTSTRING(IDF_LABEL1,TRIM(FNAME)) IF(.NOT.MSPINSPECTOR_OPENFILES_AREASVAT(IU))THEN INQUIRE(UNIT=IU,OPENED=LEX); IF(LEX)CLOSE(IU) CALL WMESSAGEBOX(OKONLY,EXCLAMATIONICON,COMMONOK,'iMOD cannot open file '//CHAR(13)//TRIM(ROOT)//TRIM(FNAME),'Error'); RETURN ENDIF FNAME='\'//TRIM(MNAME)//'\METASWAP\PARA_SIM.INP' I=I+1 ; CALL WDIALOGSELECT(ID_DIRPROGRESS) ; CALL WDIALOGPUTPROGRESSBAR(IDF_PROGRESS1,I,0) ; CALL WDIALOGPUTSTRING(IDF_LABEL1,TRIM(FNAME)) IF(.NOT.MSPINSPECTOR_OPENFILES_PARASIM(IU))THEN INQUIRE(UNIT=IU,OPENED=LEX); IF(LEX)CLOSE(IU) CALL WMESSAGEBOX(OKONLY,EXCLAMATIONICON,COMMONOK,'iMOD cannot open file '//CHAR(13)//TRIM(ROOT)//TRIM(FNAME),'Error'); RETURN ENDIF FNAME='\'//TRIM(MNAME)//'\METASWAP\IDF_SVAT.INP' I=I+1 ; CALL WDIALOGSELECT(ID_DIRPROGRESS) ; CALL WDIALOGPUTPROGRESSBAR(IDF_PROGRESS1,I,0) ; CALL WDIALOGPUTSTRING(IDF_LABEL1,TRIM(FNAME)) IF(.NOT.MSPINSPECTOR_OPENFILES_IDF2SVAT(IU))THEN INQUIRE(UNIT=IU,OPENED=LEX); IF(LEX)CLOSE(IU) CALL WMESSAGEBOX(OKONLY,EXCLAMATIONICON,COMMONOK,'iMOD cannot open file '//CHAR(13)//TRIM(ROOT)//TRIM(FNAME),'Error'); RETURN ENDIF FNAME='\'//TRIM(MNAME)//'\METASWAP\INFI_SVAT.INP' I=I+1 ; CALL WDIALOGSELECT(ID_DIRPROGRESS) ; CALL WDIALOGPUTPROGRESSBAR(IDF_PROGRESS1,I,0) ; CALL WDIALOGPUTSTRING(IDF_LABEL1,TRIM(FNAME)) IF(.NOT.MSPINSPECTOR_OPENFILES_INFISVAT(IU))THEN INQUIRE(UNIT=IU,OPENED=LEX); IF(LEX)CLOSE(IU) CALL WMESSAGEBOX(OKONLY,EXCLAMATIONICON,COMMONOK,'iMOD cannot open file '//CHAR(13)//TRIM(ROOT)//TRIM(FNAME),'Error'); RETURN ENDIF FNAME='\'//TRIM(MNAME)//'\METASWAP\SCAP_SVAT.INP' I=I+1 ; CALL WDIALOGSELECT(ID_DIRPROGRESS) ; CALL WDIALOGPUTPROGRESSBAR(IDF_PROGRESS1,I,0) ; CALL WDIALOGPUTSTRING(IDF_LABEL1,TRIM(FNAME)) IF(.NOT.MSPINSPECTOR_OPENFILES_SCAPSVAT(IU))THEN INQUIRE(UNIT=IU,OPENED=LEX); IF(LEX)CLOSE(IU) CALL WMESSAGEBOX(OKONLY,EXCLAMATIONICON,COMMONOK,'iMOD cannot open file '//CHAR(13)//TRIM(ROOT)//TRIM(FNAME),'Error'); RETURN ENDIF FNAME='\'//TRIM(MNAME)//'\METASWAP\LUSE_SVAT.INP' I=I+1 ; CALL WDIALOGSELECT(ID_DIRPROGRESS) ; CALL WDIALOGPUTPROGRESSBAR(IDF_PROGRESS1,I,0) ; CALL WDIALOGPUTSTRING(IDF_LABEL1,TRIM(FNAME)) IF(.NOT.MSPINSPECTOR_OPENFILES_LUSESVAT(IU))THEN INQUIRE(UNIT=IU,OPENED=LEX); IF(LEX)CLOSE(IU) CALL WMESSAGEBOX(OKONLY,EXCLAMATIONICON,COMMONOK,'iMOD cannot open file '//CHAR(13)//TRIM(ROOT)//TRIM(FNAME),'Error'); RETURN ENDIF FNAME='\'//TRIM(MNAME)//'\METASWAP\METE_GRID.INP' I=I+1 ; CALL WDIALOGSELECT(ID_DIRPROGRESS) ; CALL WDIALOGPUTPROGRESSBAR(IDF_PROGRESS1,I,0) ; CALL WDIALOGPUTSTRING(IDF_LABEL1,TRIM(FNAME)) IF(.NOT.MSPINSPECTOR_OPENFILES_METEGRID(IU))THEN INQUIRE(UNIT=IU,OPENED=LEX); IF(LEX)CLOSE(IU) CALL WMESSAGEBOX(OKONLY,EXCLAMATIONICON,COMMONOK,'iMOD cannot open file '//CHAR(13)//TRIM(ROOT)//TRIM(FNAME),'Error'); RETURN ENDIF FNAME='\'//TRIM(MNAME)//'\METASWAP\FACT_SVAT.INP' I=I+1 ; CALL WDIALOGSELECT(ID_DIRPROGRESS) ; CALL WDIALOGPUTPROGRESSBAR(IDF_PROGRESS1,I,0) ; CALL WDIALOGPUTSTRING(IDF_LABEL1,TRIM(FNAME)) IF(.NOT.MSPINSPECTOR_OPENFILES_FACTSVAT(IU))THEN INQUIRE(UNIT=IU,OPENED=LEX); IF(LEX)CLOSE(IU) CALL WMESSAGEBOX(OKONLY,EXCLAMATIONICON,COMMONOK,'iMOD cannot open file '//CHAR(13)//TRIM(ROOT)//TRIM(FNAME),'Error'); RETURN ENDIF FNAME='\'//TRIM(MNAME)//'\METASWAP\TIOP_SIM.INP' I=I+1 ; CALL WDIALOGSELECT(ID_DIRPROGRESS) ; CALL WDIALOGPUTPROGRESSBAR(IDF_PROGRESS1,I,0) ; CALL WDIALOGPUTSTRING(IDF_LABEL1,TRIM(FNAME)) IF(.NOT.MSPINSPECTOR_OPENFILES_TIOPSIM(IU))THEN INQUIRE(UNIT=IU,OPENED=LEX); IF(LEX)CLOSE(IU) CALL WMESSAGEBOX(OKONLY,EXCLAMATIONICON,COMMONOK,'iMOD cannot open file '//CHAR(13)//TRIM(ROOT)//TRIM(FNAME),'Error'); RETURN ENDIF FNAME='\'//TRIM(MNAME)//'\METASWAP\MOD2SVAT.INP' I=I+1 ; CALL WDIALOGSELECT(ID_DIRPROGRESS) ; CALL WDIALOGPUTPROGRESSBAR(IDF_PROGRESS1,I,0) ; CALL WDIALOGPUTSTRING(IDF_LABEL1,TRIM(FNAME)) IF(.NOT.MSPINSPECTOR_OPENFILES_MOD2SVAT(IU))THEN INQUIRE(UNIT=IU,OPENED=LEX); IF(LEX)CLOSE(IU) CALL WMESSAGEBOX(OKONLY,EXCLAMATIONICON,COMMONOK,'iMOD cannot open file '//CHAR(13)//TRIM(ROOT)//TRIM(FNAME),'Error'); RETURN ENDIF FNAME='\'//TRIM(MNAME)//'\METASWAP\SVAT2PRECGRID.INP' I=I+1 ; CALL WDIALOGSELECT(ID_DIRPROGRESS) ; CALL WDIALOGPUTPROGRESSBAR(IDF_PROGRESS1,I,0) ; CALL WDIALOGPUTSTRING(IDF_LABEL1,TRIM(FNAME)) IF(.NOT.MSPINSPECTOR_OPENFILES_SVATPREC(IU))THEN INQUIRE(UNIT=IU,OPENED=LEX); IF(LEX)CLOSE(IU) CALL WMESSAGEBOX(OKONLY,EXCLAMATIONICON,COMMONOK,'iMOD cannot open file '//CHAR(13)//TRIM(ROOT)//TRIM(FNAME),'Error'); RETURN ENDIF FNAME='\'//TRIM(MNAME)//'\METASWAP\SVAT2ETREFGRID.INP' I=I+1 ; CALL WDIALOGSELECT(ID_DIRPROGRESS) ; CALL WDIALOGPUTPROGRESSBAR(IDF_PROGRESS1,I,0) ; CALL WDIALOGPUTSTRING(IDF_LABEL1,TRIM(FNAME)) IF(.NOT.MSPINSPECTOR_OPENFILES_SVATETREF(IU))THEN INQUIRE(UNIT=IU,OPENED=LEX); IF(LEX)CLOSE(IU) CALL WMESSAGEBOX(OKONLY,EXCLAMATIONICON,COMMONOK,'iMOD cannot open file '//CHAR(13)//TRIM(ROOT)//TRIM(FNAME),'Error'); RETURN ENDIF FNAME='\'//TRIM(MNAME)//'\METASWAP\SVAT2SWNR_ROFF.INP' I=I+1 ; CALL WDIALOGSELECT(ID_DIRPROGRESS) ; CALL WDIALOGPUTPROGRESSBAR(IDF_PROGRESS1,I,0) ; CALL WDIALOGPUTSTRING(IDF_LABEL1,TRIM(FNAME)) IF(.NOT.MSPINSPECTOR_OPENFILES_SVAT2SWNRROFF(IU))THEN INQUIRE(UNIT=IU,OPENED=LEX); IF(LEX)CLOSE(IU) CALL WMESSAGEBOX(OKONLY,EXCLAMATIONICON,COMMONOK,'iMOD cannot open file '//CHAR(13)//TRIM(ROOT)//TRIM(FNAME),'Error'); RETURN ENDIF IF(.NOT.MSPINSPECTOR_PROCESSFILES())RETURN CALL WDIALOGSELECT(ID_DIRPROGRESS); CALL WDIALOGUNLOAD() MSPINSPECTOR_OPENFILES=.TRUE. END FUNCTION MSPINSPECTOR_OPENFILES !###====================================================================== SUBROUTINE MSPINSPECTOR_OPENFILES_FIELDS(I) !###====================================================================== IMPLICIT NONE INTEGER,INTENT(IN) :: I !## enable fields and activate tabs CALL WDIALOGSELECT(ID_DMSPANALYSER_TAB1) CALL WDIALOGFIELDSTATE(ID_ZOOMFULL,I) CALL WDIALOGFIELDSTATE(IDF_LABEL1,I) CALL WDIALOGSELECT(ID_DMSPANALYSER) CALL WDIALOGFIELDSTATE(IDOK,I) CALL WDIALOGTABSTATE(IDF_TAB1,ID_DMSPANALYSER_TAB2,I) CALL WDIALOGTABSTATE(IDF_TAB1,ID_DMSPANALYSER_TAB3,I) CALL WDIALOGTABSTATE(IDF_TAB1,ID_DMSPANALYSER_TAB4,I) CALL WDIALOGTABSTATE(IDF_TAB1,ID_DMSPANALYSER_TAB5,I) IF(I.EQ.1)THEN CALL MSPINSPECTOR_TAB3_PUTPARAMLIST() CALL MSPINSPECTOR_TAB5_PUTPARAMLIST() ENDIF !## clear fields from former activities CALL MSPINSPECTOR_CLEANGRIDS() END SUBROUTINE MSPINSPECTOR_OPENFILES_FIELDS !###====================================================================== LOGICAL FUNCTION MSPINSPECTOR_OPENFILES_DXC(IU) !###====================================================================== IMPLICIT NONE INTEGER,INTENT(OUT) :: IU INTEGER :: I,IOS MSPINSPECTOR_OPENFILES_DXC=.FALSE. !## allocate memory - mainly number of svats IU=UTL_GETUNIT(); OPEN(IU,FILE=TRIM(ROOT)//'\'//TRIM(MNAME)//'\MF2005_TMP\'//TRIM(MFNAME),STATUS='OLD',ACTION='READ',IOSTAT=IOS) IF(IOS.NE.0)RETURN READ(IU,*,IOSTAT=IOS) DXC%MXID; IF(IOS.NE.0)RETURN READ(IU,*,IOSTAT=IOS) DXC%MXID; IF(IOS.NE.0)RETURN ALLOCATE(DXC%INFO(DXC%MXID),STAT=IOS); IF(IOS.NE.0)RETURN DO I=1,DXC%MXID READ(IU,*,IOSTAT=IOS) DXC%INFO(I)%ILAY,DXC%INFO(I)%IROW,DXC%INFO(I)%ICOL,DXC%INFO(I)%MFID IF(IOS.NE.0)RETURN ENDDO CLOSE(IU) ALLOCATE(DXC%LABEL(4),DXC%UNIT(4),DXC%IACT(4),DXC%INSPVAL(4),DXC%DXCIREC(2)) DXC%LABEL(1)='Layer number' ; DXC%UNIT(1)='-' DXC%LABEL(2)='Row number (Modflow area)' ; DXC%UNIT(2)='-' DXC%LABEL(3)='Column number (Modflow area)' ; DXC%UNIT(3)='-' DXC%LABEL(4)='Modflow-ID' ; DXC%UNIT(4)='-' DXC%IACT=1 ; DXC%INSPVAL='' MSPINSPECTOR_OPENFILES_DXC=.TRUE. END FUNCTION MSPINSPECTOR_OPENFILES_DXC !###====================================================================== LOGICAL FUNCTION MSPINSPECTOR_OPENFILES_PARASIM(IU) !###====================================================================== IMPLICIT NONE INTEGER,INTENT(OUT) :: IU INTEGER :: IOS MSPINSPECTOR_OPENFILES_PARASIM=.FALSE. !## read netwerk from paramsim.inp IU=UTL_GETUNIT(); OPEN(IU,FILE=TRIM(ROOT)//'\'//TRIM(MNAME)//'\METASWAP\PARA_SIM.INP',STATUS='OLD',ACTION='READ',IOSTAT=IOS) IF(IOS.NE.0)RETURN CALL IDFNULLIFY(MSPIDF) DO READ(IU,'(A)',IOSTAT=IOS) LINE; IF(IOS.NE.0)EXIT IF(INDEX(UTL_CAP(LINE,'U'),'IDF_XMIN').GT.0)READ(LINE(INDEX(LINE,'=',.TRUE.)+1:),*) MSPIDF%XMIN IF(INDEX(UTL_CAP(LINE,'U'),'IDF_YMIN').GT.0)READ(LINE(INDEX(LINE,'=',.TRUE.)+1:),*) MSPIDF%YMIN IF(INDEX(UTL_CAP(LINE,'U'),'IDF_DX').GT.0) READ(LINE(INDEX(LINE,'=',.TRUE.)+1:),*) MSPIDF%DX IF(INDEX(UTL_CAP(LINE,'U'),'IDF_DY').GT.0) READ(LINE(INDEX(LINE,'=',.TRUE.)+1:),*) MSPIDF%DY IF(INDEX(UTL_CAP(LINE,'U'),'IDF_NCOL').GT.0)READ(LINE(INDEX(LINE,'=',.TRUE.)+1:),*) MSPIDF%NCOL IF(INDEX(UTL_CAP(LINE,'U'),'IDF_NROW').GT.0)READ(LINE(INDEX(LINE,'=',.TRUE.)+1:),*) MSPIDF%NROW IF(INDEX(UTL_CAP(LINE,'U'),'IYBG').GT.0) READ(LINE(INDEX(LINE,'=',.TRUE.)+1:),*) IYBG IF(INDEX(UTL_CAP(LINE,'U'),'TDBG ').GT.0) READ(LINE(INDEX(LINE,'=',.TRUE.)+1:),*) TDBG ENDDO CLOSE(IU) MSPIDF%XMAX=MSPIDF%XMIN+MSPIDF%DX*MSPIDF%NCOL MSPIDF%YMAX=MSPIDF%YMIN+MSPIDF%DY*MSPIDF%NROW MSPIDF%ITYPE=4 !## single precision nodata value as the mspidf is a single precision idf MSPIDF%NODATA=HUGE(1.0) IF(.NOT.IDFALLOCATEX(MSPIDF))RETURN; MSPIDF%X=0.0D0 MSPINSPECTOR_OPENFILES_PARASIM=.TRUE. END FUNCTION MSPINSPECTOR_OPENFILES_PARASIM !###====================================================================== LOGICAL FUNCTION MSPINSPECTOR_OPENFILES_MOD2SVAT(IU) !###====================================================================== IMPLICIT NONE INTEGER,INTENT(OUT) :: IU INTEGER :: I,N,IOS MSPINSPECTOR_OPENFILES_MOD2SVAT=.FALSE. !## allocate memory - mainly number of svats IU=UTL_GETUNIT(); OPEN(IU,FILE=TRIM(ROOT)//'\'//TRIM(MNAME)//'\METASWAP\MOD2SVAT.INP',STATUS='OLD',ACTION='READ',IOSTAT=IOS) IF(IOS.NE.0)RETURN ALLOCATE(MODSVAT%INFO(1),STAT=IOS); IF(IOS.NE.0)RETURN MODSVAT%MXID=0 DO I=1,2 N=1 DO READ(IU,'(I10,2X,I10,I5)',IOSTAT=IOS) MODSVAT%INFO(N)%MFID,MODSVAT%INFO(N)%SVATID,MODSVAT%INFO(N)%LY IF(IOS.NE.0)EXIT IF(I.EQ.2)THEN ; N=N+1 ; IF(N.GT.MODSVAT%MXID)EXIT ; ELSE ; MODSVAT%MXID=MODSVAT%MXID+1 ; ENDIF ENDDO IF(I.EQ.1)THEN; DEALLOCATE(MODSVAT%INFO); ALLOCATE(MODSVAT%INFO(MODSVAT%MXID),STAT=IOS); IF(IOS.NE.0)RETURN; ENDIF REWIND(IU) ENDDO CLOSE(IU) ALLOCATE(MODSVAT%LABEL(3),MODSVAT%UNIT(3),MODSVAT%IACT(3),MODSVAT%INSPVAL(3)) MODSVAT%LABEL(1)='Modflow-ID' ; MODSVAT%UNIT(1)='-' MODSVAT%LABEL(2)='SVAT-ID' ; MODSVAT%UNIT(2)='-' MODSVAT%LABEL(3)='LU-layer' ; MODSVAT%UNIT(3)='-' MODSVAT%IACT=1 MODSVAT%INSPVAL='' MSPINSPECTOR_OPENFILES_MOD2SVAT=.TRUE. END FUNCTION MSPINSPECTOR_OPENFILES_MOD2SVAT !###====================================================================== LOGICAL FUNCTION MSPINSPECTOR_OPENFILES_IDF2SVAT(IU) !###====================================================================== IMPLICIT NONE INTEGER,INTENT(OUT) :: IU INTEGER :: I,N,IOS MSPINSPECTOR_OPENFILES_IDF2SVAT=.FALSE. !## allocate memory - mainly number of svats IU=UTL_GETUNIT(); OPEN(IU,FILE=TRIM(ROOT)//'\'//TRIM(MNAME)//'\METASWAP\IDF_SVAT.INP',STATUS='OLD',ACTION='READ',IOSTAT=IOS) IF(IOS.NE.0)RETURN ALLOCATE(IDFSVAT%INFO(1),STAT=IOS); IF(IOS.NE.0)RETURN IDFSVAT%MXID=0 DO I=1,2 N=1 DO READ(IU,'(3I10,2F15.0)',IOSTAT=IOS) IDFSVAT%INFO(N)%SVAT,IDFSVAT%INFO(N)%ROW,IDFSVAT%INFO(N)%COL,IDFSVAT%INFO(N)%X_CORD,IDFSVAT%INFO(N)%Y_CORD IF(IOS.NE.0)EXIT IF(I.EQ.2)THEN ; N=N+1 ; IF(N.GT.IDFSVAT%MXID)EXIT ; ELSE ; IDFSVAT%MXID=IDFSVAT%MXID+1 ; ENDIF ENDDO IF(I.EQ.1)THEN; DEALLOCATE(IDFSVAT%INFO); ALLOCATE(IDFSVAT%INFO(IDFSVAT%MXID),STAT=IOS); IF(IOS.NE.0)RETURN; ENDIF REWIND(IU) ENDDO CLOSE(IU) ALLOCATE(IDFSVAT%LABEL(5),IDFSVAT%UNIT(5),IDFSVAT%IACT(5),IDFSVAT%INSPVAL(5)) IDFSVAT%LABEL(1)='SVAT-ID' ; IDFSVAT%UNIT(1)='-' IDFSVAT%LABEL(2)='Row number (MetaSWAP area)' ; IDFSVAT%UNIT(2)='-' IDFSVAT%LABEL(3)='Column number (MetaSWAP area)' ; IDFSVAT%UNIT(3)='-' IDFSVAT%LABEL(4)='X location of MetaSWAP cell' ; IDFSVAT%UNIT(4)='-' IDFSVAT%LABEL(5)='Y location of MetaSWAP cell' ; IDFSVAT%UNIT(5)='-' IDFSVAT%IACT=1 IDFSVAT%INSPVAL='' MSPINSPECTOR_OPENFILES_IDF2SVAT=.TRUE. END FUNCTION MSPINSPECTOR_OPENFILES_IDF2SVAT !###====================================================================== LOGICAL FUNCTION MSPINSPECTOR_OPENFILES_AREASVAT(IU) !###====================================================================== IMPLICIT NONE INTEGER,INTENT(OUT) :: IU INTEGER :: I,IOS,N MSPINSPECTOR_OPENFILES_AREASVAT=.FALSE. !## allocate memory - mainly number of svats IU=UTL_GETUNIT(); OPEN(IU,FILE=TRIM(ROOT)//'\'//TRIM(MNAME)//'\METASWAP\AREA_SVAT.INP',STATUS='OLD',ACTION='READ',IOSTAT=IOS) IF(IOS.NE.0)RETURN ALLOCATE(AREASVAT%INFO(1),STAT=IOS); IF(IOS.NE.0)RETURN AREASVAT%MXID=0 DO I=1,2 N=1 DO READ(IU,'(I10,F10.1,2F8.3,I6,16X,I6,F8.3,I10,2F8.3)',IOSTAT=IOS) AREASVAT%INFO(N)%NUND,AREASVAT%INFO(N)%ARK, & AREASVAT%INFO(N)%SURF,AREASVAT%INFO(N)%TEMP,AREASVAT%INFO(N)%SOIL,AREASVAT%INFO(N)%LUSE,AREASVAT%INFO(N)%RZ, & AREASVAT%INFO(N)%METE,AREASVAT%INFO(N)%LCFPREP,AREASVAT%INFO(N)%LCFPOT IF(IOS.NE.0)EXIT IF(I.EQ.2)THEN ; N=N+1 ; IF(N.GT.AREASVAT%MXID)EXIT ; ELSE ; AREASVAT%MXID=AREASVAT%MXID+1 ; ENDIF ENDDO IF(I.EQ.1)THEN; DEALLOCATE(AREASVAT%INFO); ALLOCATE(AREASVAT%INFO(AREASVAT%MXID),STAT=IOS); IF(IOS.NE.0)RETURN; ENDIF REWIND(IU) ENDDO CLOSE(IU) ALLOCATE(AREASVAT%LABEL(10),AREASVAT%UNIT(10),AREASVAT%IACT(10),AREASVAT%INSPVAL(10)) AREASVAT%LABEL(1)='SVAT-ID' ; AREASVAT%UNIT(1)='-' AREASVAT%LABEL(2)='ARK-area' ; AREASVAT%UNIT(2)='m2' AREASVAT%LABEL(3)='GLK-soil surface elevation' ; AREASVAT%UNIT(3)='m+MSL' AREASVAT%LABEL(4)='TEMP-temp. at bottom of soil profile' ; AREASVAT%UNIT(4)='C' AREASVAT%LABEL(5)='SLK-soil physical unit number' ; AREASVAT%UNIT(5)='-' AREASVAT%LABEL(6)='LUK-land use type' ; AREASVAT%UNIT(6)='-' AREASVAT%LABEL(7)='DPRZK-root zone thickness / maximum' ; AREASVAT%UNIT(7)='m' AREASVAT%LABEL(8)='NM-meteorological region code number' ; AREASVAT%UNIT(8)='-' AREASVAT%LABEL(9)='CFPM-local calibration factor for precipitation' ; AREASVAT%UNIT(9)='-' AREASVAT%LABEL(10)='CFETREF-local calibration factor for potential' ; AREASVAT%UNIT(10)='-' AREASVAT%IACT=1 AREASVAT%IACT(1)=0 AREASVAT%INSPVAL='' MSPINSPECTOR_OPENFILES_AREASVAT=.TRUE. END FUNCTION MSPINSPECTOR_OPENFILES_AREASVAT !###====================================================================== LOGICAL FUNCTION MSPINSPECTOR_OPENFILES_INFISVAT(IU) !###====================================================================== IMPLICIT NONE INTEGER,INTENT(OUT) :: IU INTEGER :: I,IOS,N MSPINSPECTOR_OPENFILES_INFISVAT=.FALSE. !## allocate memory - ....... IU=UTL_GETUNIT(); OPEN(IU,FILE=TRIM(ROOT)//'\'//TRIM(MNAME)//'\METASWAP\INFI_SVAT.INP',STATUS='OLD',ACTION='READ',IOSTAT=IOS) IF(IOS.NE.0)RETURN ALLOCATE(INFISVAT%INFO(1),STAT=IOS); IF(IOS.NE.0)RETURN INFISVAT%MXID=0 DO I=1,2 N=1 DO READ(IU,'(I10,5F8.0)',IOSTAT=IOS) INFISVAT%INFO(N)%NUND,INFISVAT%INFO(N)%QINBASIC,INFISVAT%INFO(N)%CTOP_DOWN, & INFISVAT%INFO(N)%CTOP_UP,INFISVAT%INFO(N)%CBOT,INFISVAT%INFO(N)%SC2 IF(IOS.NE.0)EXIT IF(I.EQ.2)THEN ; N=N+1 ; IF(N.GT.INFISVAT%MXID)EXIT ; ELSE ; INFISVAT%MXID=INFISVAT%MXID+1 ; ENDIF ENDDO IF(I.EQ.1)THEN; DEALLOCATE(INFISVAT%INFO); ALLOCATE(INFISVAT%INFO(INFISVAT%MXID),STAT=IOS); IF(IOS.NE.0)RETURN; ENDIF REWIND(IU) ENDDO CLOSE(IU) ALLOCATE(INFISVAT%LABEL(6),INFISVAT%UNIT(6),INFISVAT%IACT(6),INFISVAT%INSPVAL(6)) INFISVAT%LABEL(1)='SVAT-ID' ; INFISVAT%UNIT(1)='-' INFISVAT%LABEL(2)='QINFBASIC-infiltration capacity' ; INFISVAT%UNIT(2)='m/d' INFISVAT%LABEL(3)='CTOP_DOWN-downward flow resistance' ; INFISVAT%UNIT(3)='d' INFISVAT%LABEL(4)='CTOP_UP-upward flow resistance' ; INFISVAT%UNIT(4)='d' INFISVAT%LABEL(5)='CBOT-flow resistance bottom flux link' ; INFISVAT%UNIT(5)='d' INFISVAT%LABEL(6)='SC2-extra storage coefficient phreatic layer' ; INFISVAT%UNIT(6)='m3/m2/m' INFISVAT%IACT=1 INFISVAT%IACT(1)=0 INFISVAT%INSPVAL='' MSPINSPECTOR_OPENFILES_INFISVAT=.TRUE. END FUNCTION MSPINSPECTOR_OPENFILES_INFISVAT !###====================================================================== LOGICAL FUNCTION MSPINSPECTOR_OPENFILES_SCAPSVAT(IU) !###====================================================================== IMPLICIT NONE INTEGER,INTENT(OUT) :: IU INTEGER :: I,IOS,N MSPINSPECTOR_OPENFILES_SCAPSVAT=.FALSE. !## allocate memory - ....... IU=UTL_GETUNIT(); OPEN(IU,FILE=TRIM(ROOT)//'\'//TRIM(MNAME)//'\METASWAP\SCAP_SVAT.INP',STATUS='OLD',ACTION='READ',IOSTAT=IOS) IF(IOS.NE.0)RETURN ALLOCATE(SCAPSVAT%INFO(1),STAT=IOS); IF(IOS.NE.0)RETURN SCAPSVAT%MXID=0 DO I=1,2 N=1 DO READ(IU,'(I10,4F8.0,I10,I6,I10)',IOSTAT=IOS) SCAPSVAT%INFO(N)%SVAT,SCAPSVAT%INFO(N)%FMMXABGW,SCAPSVAT%INFO(N)%FMMXABSW,& SCAPSVAT%INFO(N)%FXABGW,SCAPSVAT%INFO(N)%FXABSW,SCAPSVAT%INFO(N)%SVATAB,SCAPSVAT%INFO(N)%LYAB,SCAPSVAT%INFO(N)%SWNRAB IF(IOS.NE.0)EXIT IF(I.EQ.2)THEN N=N+1 ; IF(N.GT.SCAPSVAT%MXID)EXIT ; ELSE ; SCAPSVAT%MXID=SCAPSVAT%MXID+1 ; ENDIF ENDDO IF(I.EQ.1)THEN; DEALLOCATE(SCAPSVAT%INFO); ALLOCATE(SCAPSVAT%INFO(SCAPSVAT%MXID),STAT=IOS); IF(IOS.NE.0)RETURN; ENDIF REWIND(IU) ENDDO CLOSE(IU) ALLOCATE(SCAPSVAT%LABEL(8),SCAPSVAT%UNIT(8),SCAPSVAT%IACT(8),SCAPSVAT%INSPVAL(8)) SCAPSVAT%LABEL(1)='SVAT-ID' ; SCAPSVAT%UNIT(1)='-' SCAPSVAT%LABEL(2)='FMMXABGW-max. gw abstraction' ; SCAPSVAT%UNIT(2)='mm/d' SCAPSVAT%LABEL(3)='FMMXABSW-max. sw abstraction' ; SCAPSVAT%UNIT(3)='mm/d' SCAPSVAT%LABEL(4)='FXABGW-max. gw abstraction' ; SCAPSVAT%UNIT(4)='m3/d' SCAPSVAT%LABEL(5)='FXABSW-max. sw abstraction' ; SCAPSVAT%UNIT(5)='m3/d' SCAPSVAT%LABEL(6)='SVATAB-SVAT unit source gw abstraction' ; SCAPSVAT%UNIT(6)='-' SCAPSVAT%LABEL(7)='LYAB-layer number for abstraction' ; SCAPSVAT%UNIT(7)='-' SCAPSVAT%LABEL(8)='SWNRAB-trajectory ID surface water abstraction' ; SCAPSVAT%UNIT(8)='-' SCAPSVAT%IACT=1 SCAPSVAT%IACT(1)=0 SCAPSVAT%INSPVAL='' MSPINSPECTOR_OPENFILES_SCAPSVAT=.TRUE. END FUNCTION MSPINSPECTOR_OPENFILES_SCAPSVAT !###====================================================================== LOGICAL FUNCTION MSPINSPECTOR_OPENFILES_LUSESVAT(IU) !###====================================================================== IMPLICIT NONE INTEGER,INTENT(OUT) :: IU INTEGER :: I,IOS,N MSPINSPECTOR_OPENFILES_LUSESVAT=.FALSE. !## allocate memory - ....... IU=UTL_GETUNIT(); OPEN(IU,FILE=TRIM(ROOT)//'\'//TRIM(MNAME)//'\METASWAP\LUSE_SVAT.INP',STATUS='OLD',ACTION='READ',IOSTAT=IOS) IF(IOS.NE.0)RETURN ALLOCATE(LUSESVAT%INFO(1),STAT=IOS); IF(IOS.NE.0)RETURN LUSESVAT%MXID=0 DO I=1,2 N=1 DO READ(IU,'(I6,1X,A19,I6,F6.0,10F8.0,1F8.2,3F6.0)',IOSTAT=IOS) LUSESVAT%INFO(N)%LU,LUSESVAT%INFO(N)%LUNA,LUSESVAT%INFO(N)%VGLU,& LUSESVAT%INFO(N)%ALPHACRIT,LUSESVAT%INFO(N)%P1FD,LUSESVAT%INFO(N)%P2FD,LUSESVAT%INFO(N)%P3HFD,LUSESVAT%INFO(N)%P3LFD,& LUSESVAT%INFO(N)%P4FD,LUSESVAT%INFO(N)%T3HFD,LUSESVAT%INFO(N)%T3LFD,LUSESVAT%INFO(N)%PBGSPLU,LUSESVAT%INFO(N)%FREVSPLU,& LUSESVAT%INFO(N)%GISPLU,LUSESVAT%INFO(N)%TIGISPLU,LUSESVAT%INFO(N)%RPSPLU,LUSESVAT%INFO(N)%TDBGSPLU,LUSESVAT%INFO(N)%TDEDSPLU IF(IOS.NE.0)EXIT IF(I.EQ.2)THEN ; N=N+1 ; IF(N.GT.LUSESVAT%MXID)EXIT ; ELSE ; LUSESVAT%MXID=LUSESVAT%MXID+1 ; ENDIF ENDDO IF(I.EQ.1)THEN; DEALLOCATE(LUSESVAT%INFO); ALLOCATE(LUSESVAT%INFO(LUSESVAT%MXID),STAT=IOS); IF(IOS.NE.0)RETURN; ENDIF REWIND(IU) ENDDO CLOSE(IU) ALLOCATE(LUSESVAT%LABEL(18),LUSESVAT%UNIT(18),LUSESVAT%IACT(18),LUSESVAT%INSPVAL(18)) !,LUSESVAT%GRAPH(18)) LUSESVAT%LABEL(1)='LU-index of land use type' ; LUSESVAT%UNIT(1)='-' LUSESVAT%LABEL(2)='LUNA-name of land use type' ; LUSESVAT%UNIT(2)='-' LUSESVAT%LABEL(3)='VGLU-index of vegetation type' ; LUSESVAT%UNIT(3)='-' LUSESVAT%LABEL(4)='ALPHACRIT-parameter of Jarvis(1989)' ; LUSESVAT%UNIT(4)='-' LUSESVAT%LABEL(5)='P1FD-p1 Feddes function' ; LUSESVAT%UNIT(5)='m' LUSESVAT%LABEL(6)='P2FD-p2 Feddes function' ; LUSESVAT%UNIT(6)='m' LUSESVAT%LABEL(7)='P3HFD-p3h Feddes function' ; LUSESVAT%UNIT(7)='m' LUSESVAT%LABEL(8)='P3LFD-p3l Feddes function' ; LUSESVAT%UNIT(8)='m' LUSESVAT%LABEL(9)='P4FD-p4 Feddes function' ; LUSESVAT%UNIT(9)='m' LUSESVAT%LABEL(10)='T3HFD-t3 Feddes function' ; LUSESVAT%UNIT(10)='mm' LUSESVAT%LABEL(11)='T3LFD-t3 Feddes function' ; LUSESVAT%UNIT(11)='mm' LUSESVAT%LABEL(12)='PBGSPLU-pressure head begin sprinkling' ; LUSESVAT%UNIT(12)='m' LUSESVAT%LABEL(13)='FREVSPLU-fraction evaporated sprinkling water' ; LUSESVAT%UNIT(13)='-' LUSESVAT%LABEL(14)='GISPLU-gift in rotational period' ; LUSESVAT%UNIT(14)='mm' LUSESVAT%LABEL(15)='TIGISPLU-duration gift' ; LUSESVAT%UNIT(15)='d' LUSESVAT%LABEL(16)='RPSPLU-rotational period' ; LUSESVAT%UNIT(16)='d' LUSESVAT%LABEL(17)='TDBGSPLU-beginning of sprinkling period' ; LUSESVAT%UNIT(17)='d' LUSESVAT%LABEL(18)='TDEDSPLU-end of sprinkling period' ; LUSESVAT%UNIT(18)='d' LUSESVAT%IACT=1; LUSESVAT%INSPVAL='' !LUSESVAT%GRAPH=0 MSPINSPECTOR_OPENFILES_LUSESVAT=.TRUE. END FUNCTION MSPINSPECTOR_OPENFILES_LUSESVAT !###====================================================================== LOGICAL FUNCTION MSPINSPECTOR_OPENFILES_METEGRID(IU) !###====================================================================== IMPLICIT NONE INTEGER,INTENT(OUT) :: IU INTEGER :: I,IOS,N,IY,IM,ID,DN MSPINSPECTOR_OPENFILES_METEGRID=.FALSE. !## allocate memory - ....... IU=UTL_GETUNIT(); OPEN(IU,FILE=TRIM(ROOT)//'\'//TRIM(MNAME)//'\METASWAP\METE_GRID.INP',STATUS='OLD',ACTION='READ',IOSTAT=IOS) IF(IOS.NE.0)RETURN ALLOCATE(METEGRID%INFO(1),STAT=IOS); IF(IOS.NE.0)RETURN METEGRID%MXID=0 DO I=1,2 N=1 DO READ(IU,*,IOSTAT=IOS) METEGRID%INFO(N)%TD,METEGRID%INFO(N)%IY,METEGRID%INFO(N)%PRECGRID,METEGRID%INFO(N)%ETREFGRID IF(IOS.NE.0)EXIT IF(I.EQ.2)THEN ; N=N+1 ; IF(N.GT.METEGRID%MXID)EXIT ; ELSE ; METEGRID%MXID=METEGRID%MXID+1 ; ENDIF ENDDO IF(I.EQ.1)THEN; DEALLOCATE(METEGRID%INFO); ALLOCATE(METEGRID%INFO(METEGRID%MXID),STAT=IOS); IF(IOS.NE.0)RETURN; ENDIF REWIND(IU) ENDDO CLOSE(IU) ! !## set initial julian date ! DN=INT(METEGRID%INFO(1)%TD); IY=METEGRID%INFO(1)%IY ! CALL UTL_GETDAYANDMONTHFROMDAYNUMBER(DN,IY,ID,IM); METEGRID%INFO(1)%JD=JD(IY,IM,ID) !## configure julian date to all entries DO I=1,METEGRID%MXID METEGRID%INFO(I)%JD=0 !## does not support timesteps < 1 day IF(INT(METEGRID%INFO(I)%TD).EQ.0)CYCLE DN=INT(METEGRID%INFO(I)%TD); IY=METEGRID%INFO(I)%IY CALL UTL_GETDAYANDMONTHFROMDAYNUMBER(DN,IY,ID,IM); METEGRID%INFO(I)%JD=JD(IY,IM,ID) ENDDO ALLOCATE(METEGRID%LABEL(4),METEGRID%UNIT(4),METEGRID%IACT(4),METEGRID%GRAPH(4),METEGRID%INSPVAL(4)) METEGRID%LABEL(1)='TD-day from 00:00:00' ; METEGRID%UNIT(1)='d' METEGRID%LABEL(2)='IY-year number' ; METEGRID%UNIT(2)='-' METEGRID%LABEL(3)='PRECGRID-precipitation' ; METEGRID%UNIT(3)='mm/d' METEGRID%LABEL(4)='ETREFGRID-evapotranspiration' ; METEGRID%UNIT(4)='mm/d' METEGRID%GRAPH=0 ; METEGRID%INSPVAL='' METEGRID%IACT=1 ; METEGRID%GRAPH(3)=1 ; METEGRID%GRAPH(4)=1 MSPINSPECTOR_OPENFILES_METEGRID=.TRUE. END FUNCTION MSPINSPECTOR_OPENFILES_METEGRID !###====================================================================== LOGICAL FUNCTION MSPINSPECTOR_OPENFILES_SVATPREC(IU) !###====================================================================== IMPLICIT NONE INTEGER,INTENT(OUT) :: IU INTEGER :: I,IOS,N MSPINSPECTOR_OPENFILES_SVATPREC=.FALSE. !## allocate memory - ....... IU=UTL_GETUNIT(); OPEN(IU,FILE=TRIM(ROOT)//'\'//TRIM(MNAME)//'\METASWAP\SVAT2PRECGRID.INP',STATUS='OLD',ACTION='READ',IOSTAT=IOS) IF(IOS.NE.0)RETURN ALLOCATE(SVATPREC%INFO(1),STAT=IOS); IF(IOS.NE.0)RETURN SVATPREC%MXID=0 DO I=1,2 N=1 DO READ(IU,*,IOSTAT=IOS) SVATPREC%INFO(N)%SVAT,SVATPREC%INFO(N)%ROW,SVATPREC%INFO(N)%COLUMN IF(IOS.NE.0)EXIT IF(I.EQ.2)THEN ; N=N+1 ; IF(N.GT.SVATPREC%MXID)EXIT ; ELSE ; SVATPREC%MXID=SVATPREC%MXID+1 ; ENDIF ENDDO IF(I.EQ.1)THEN; DEALLOCATE(SVATPREC%INFO); ALLOCATE(SVATPREC%INFO(SVATPREC%MXID),STAT=IOS); IF(IOS.NE.0)RETURN; ENDIF REWIND(IU) ENDDO CLOSE(IU) ALLOCATE(SVATPREC%LABEL(3),SVATPREC%UNIT(3),SVATPREC%IACT(3),SVATPREC%INSPVAL(3)) SVATPREC%LABEL(1)='SVAT-ID' ; SVATPREC%UNIT(1)='-' SVATPREC%LABEL(2)='ROW-row number of PREC grid' ; SVATPREC%UNIT(2)='-' SVATPREC%LABEL(3)='COL-column number of PREC grid' ; SVATPREC%UNIT(3)='-' SVATPREC%IACT=1 ; SVATPREC%INSPVAL='' MSPINSPECTOR_OPENFILES_SVATPREC=.TRUE. END FUNCTION MSPINSPECTOR_OPENFILES_SVATPREC !###====================================================================== LOGICAL FUNCTION MSPINSPECTOR_OPENFILES_SVATETREF(IU) !###====================================================================== IMPLICIT NONE INTEGER,INTENT(OUT) :: IU INTEGER :: I,IOS,N MSPINSPECTOR_OPENFILES_SVATETREF=.FALSE. !## allocate memory - ....... IU=UTL_GETUNIT(); OPEN(IU,FILE=TRIM(ROOT)//'\'//TRIM(MNAME)//'\METASWAP\SVAT2PRECGRID.INP',STATUS='OLD',ACTION='READ',IOSTAT=IOS) IF(IOS.NE.0)RETURN ALLOCATE(SVATETREF%INFO(1),STAT=IOS); IF(IOS.NE.0)RETURN SVATETREF%MXID=0 DO I=1,2 N=1 DO READ(IU,*,IOSTAT=IOS) SVATETREF%INFO(N)%SVAT,SVATETREF%INFO(N)%ROW,SVATETREF%INFO(N)%COLUMN IF(IOS.NE.0)EXIT IF(I.EQ.2)THEN ; N=N+1 ; IF(N.GT.SVATETREF%MXID)EXIT ; ELSE ; SVATETREF%MXID=SVATETREF%MXID+1 ; ENDIF ENDDO IF(I.EQ.1)THEN; DEALLOCATE(SVATETREF%INFO); ALLOCATE(SVATETREF%INFO(SVATETREF%MXID),STAT=IOS); IF(IOS.NE.0)RETURN; ENDIF REWIND(IU) ENDDO CLOSE(IU) ALLOCATE(SVATETREF%LABEL(3),SVATETREF%UNIT(3),SVATETREF%IACT(3),SVATETREF%INSPVAL(3)) SVATETREF%LABEL(1)='SVAT-ID' ; SVATETREF%UNIT(1)='-' SVATETREF%LABEL(2)='ROW-row number of ETREF grid' ; SVATETREF%UNIT(2)='-' SVATETREF%LABEL(3)='COL-column number of ETREF grid' ; SVATETREF%UNIT(3)='-' SVATETREF%IACT=1 ; SVATETREF%INSPVAL='' MSPINSPECTOR_OPENFILES_SVATETREF=.TRUE. END FUNCTION MSPINSPECTOR_OPENFILES_SVATETREF !###====================================================================== LOGICAL FUNCTION MSPINSPECTOR_OPENFILES_FACTSVAT(IU) !###====================================================================== IMPLICIT NONE INTEGER,INTENT(OUT) :: IU INTEGER :: I,IOS,N MSPINSPECTOR_OPENFILES_FACTSVAT=.FALSE. !## allocate memory - ....... IU=UTL_GETUNIT(); OPEN(IU,FILE=TRIM(ROOT)//'\'//TRIM(MNAME)//'\METASWAP\FACT_SVAT.INP',STATUS='OLD',ACTION='READ',IOSTAT=IOS) IF(IOS.NE.0)RETURN ALLOCATE(FACTSVAT%INFO(1),STAT=IOS); IF(IOS.NE.0)RETURN FACTSVAT%MXID=0 DO I=1,2 N=1 DO READ(IU,'(2I6,9F8.0)',IOSTAT=IOS) FACTSVAT%INFO(N)%VG,FACTSVAT%INFO(N)%DY,FACTSVAT%INFO(N)%CSVG,FACTSVAT%INFO(N)%LAIVG, & FACTSVAT%INFO(N)%VXICVG,FACTSVAT%INFO(N)%FAEVVG,FACTSVAT%INFO(N)%FAEIVG,FACTSVAT%INFO(N)%FAEBSVG, & FACTSVAT%INFO(N)%FAEPDVG,FACTSVAT%INFO(N)%CHVG,FACTSVAT%INFO(N)%DRPZVG IF(IOS.NE.0)EXIT IF(I.EQ.2)THEN ; N=N+1 ; IF(N.GT.FACTSVAT%MXID)EXIT ; ELSE ; FACTSVAT%MXID=FACTSVAT%MXID+1 ; ENDIF ENDDO IF(I.EQ.1)THEN; DEALLOCATE(FACTSVAT%INFO); ALLOCATE(FACTSVAT%INFO(FACTSVAT%MXID),STAT=IOS); IF(IOS.NE.0)RETURN; ENDIF REWIND(IU) ENDDO CLOSE(IU) ALLOCATE(FACTSVAT%LABEL(11),FACTSVAT%UNIT(11),FACTSVAT%IACT(11),FACTSVAT%GRAPH(11),FACTSVAT%INSPVAL(11)) FACTSVAT%LABEL(1)='VG-vegetation type' ; FACTSVAT%UNIT(1)='-' FACTSVAT%LABEL(2)='DY-day number' ; FACTSVAT%UNIT(2)='-' FACTSVAT%LABEL(3)='CSVG-soil cover' ; FACTSVAT%UNIT(3)='m2/m2' FACTSVAT%LABEL(4)='LAIVG-leaf area index' ; FACTSVAT%UNIT(4)='m2/m2' FACTSVAT%LABEL(5)='VXICVG-interception capacity' ; FACTSVAT%UNIT(5)='m3/m2' FACTSVAT%LABEL(6)='FAEVVG-vegetation factor' ; FACTSVAT%UNIT(6)='-' FACTSVAT%LABEL(7)='FAEIVG-factor for interception evaporation' ; FACTSVAT%UNIT(7)='-' FACTSVAT%LABEL(8)='FAEBSVG-factor for bare soil evaporation' ; FACTSVAT%UNIT(8)='-' FACTSVAT%LABEL(9)='FAEPDVG-factor for ponding' ; FACTSVAT%UNIT(9)='-' FACTSVAT%LABEL(10)='CHVG-crop height' ; FACTSVAT%UNIT(10)='m' FACTSVAT%LABEL(11)='DRPZVG-dynamic root zone depth' ; FACTSVAT%UNIT(11)='m' FACTSVAT%IACT=1 ; FACTSVAT%INSPVAL='' FACTSVAT%GRAPH=1 ; FACTSVAT%GRAPH(1)=0 ; FACTSVAT%GRAPH(2)=0 MSPINSPECTOR_OPENFILES_FACTSVAT=.TRUE. END FUNCTION MSPINSPECTOR_OPENFILES_FACTSVAT !###====================================================================== LOGICAL FUNCTION MSPINSPECTOR_OPENFILES_TIOPSIM(IU) !###====================================================================== IMPLICIT NONE INTEGER,INTENT(OUT) :: IU INTEGER :: I,IOS,N ! INTEGER :: YEAR,MONTH,DAY MSPINSPECTOR_OPENFILES_TIOPSIM=.FALSE. !## allocate memory - ....... IU=UTL_GETUNIT(); OPEN(IU,FILE=TRIM(ROOT)//'\'//TRIM(MNAME)//'\METASWAP\TIOP_SIM.INP',STATUS='OLD',ACTION='READ',IOSTAT=IOS) IF(IOS.NE.0)RETURN ALLOCATE(TIOPSIM%INFO(1),STAT=IOS); IF(IOS.NE.0)RETURN TIOPSIM%MXID=0 DO I=1,2 N=1 DO READ(IU,'(F15.0,3I6)',IOSTAT=IOS) TIOPSIM%INFO(N)%TD,TIOPSIM%INFO(N)%IY,TIOPSIM%INFO(N)%IO,TIOPSIM%INFO(N)%IP IF(IOS.NE.0)EXIT IF(I.EQ.2)THEN ; N=N+1 ; IF(N.GT.TIOPSIM%MXID)EXIT ; ELSE ; TIOPSIM%MXID=TIOPSIM%MXID+1 ; ENDIF ENDDO IF(I.EQ.1)THEN; DEALLOCATE(TIOPSIM%INFO); ALLOCATE(TIOPSIM%INFO(TIOPSIM%MXID),STAT=IOS); IF(IOS.NE.0)RETURN; ENDIF REWIND(IU) ENDDO CLOSE(IU) ALLOCATE(TIOPSIM%LABEL(2),TIOPSIM%UNIT(2),TIOPSIM%IACT(2)) TIOPSIM%LABEL(1)='Day from beginning year' TIOPSIM%LABEL(1)='Year' TIOPSIM%IACT=1 MSPINSPECTOR_OPENFILES_TIOPSIM=.TRUE. END FUNCTION MSPINSPECTOR_OPENFILES_TIOPSIM !###====================================================================== LOGICAL FUNCTION MSPINSPECTOR_OPENFILES_SVAT2SWNRROFF(IU) !###====================================================================== IMPLICIT NONE INTEGER,INTENT(OUT) :: IU INTEGER :: I,IOS,N MSPINSPECTOR_OPENFILES_SVAT2SWNRROFF=.FALSE. !## allocate memory - ....... IU=UTL_GETUNIT(); OPEN(IU,FILE=TRIM(ROOT)//'\'//TRIM(MNAME)//'\METASWAP\SVAT2SWNR_ROFF.INP',STATUS='OLD',ACTION='READ',IOSTAT=IOS) IF(IOS.NE.0)RETURN ALLOCATE(SVAT2SWNRROFF%INFO(1),STAT=IOS); IF(IOS.NE.0)RETURN SVAT2SWNRROFF%MXID=0 DO I=1,2 N=1 DO ! READ(IU,'(2I10,3F8.0,8X,F8.0)',IOSTAT=IOS) SVAT2SWNRROFF%INFO(N)%SVAT,SVAT2SWNRROFF%INFO(N)%SWNR,SVAT2SWNRROFF%INFO(N)%VXMU, & ! SVAT2SWNRROFF%INFO(N)%CRUNOFF,SVAT2SWNRROFF%INFO(N)%CRUNON,SVAT2SWNRROFF%INFO(N)%SLPCN READ(IU,'(2I10,3F8.0)',IOSTAT=IOS) SVAT2SWNRROFF%INFO(N)%SVAT,SVAT2SWNRROFF%INFO(N)%SWNR,SVAT2SWNRROFF%INFO(N)%VXMU, & SVAT2SWNRROFF%INFO(N)%CRUNOFF,SVAT2SWNRROFF%INFO(N)%CRUNON IF(IOS.NE.0)EXIT IF(I.EQ.2)THEN ; N=N+1 ; IF(N.GT.SVAT2SWNRROFF%MXID)EXIT ; ELSE ; SVAT2SWNRROFF%MXID=SVAT2SWNRROFF%MXID+1 ; ENDIF ENDDO IF(I.EQ.1)THEN; DEALLOCATE(SVAT2SWNRROFF%INFO); ALLOCATE(SVAT2SWNRROFF%INFO(SVAT2SWNRROFF%MXID),STAT=IOS); IF(IOS.NE.0)RETURN; ENDIF REWIND(IU) ENDDO CLOSE(IU) ALLOCATE(SVAT2SWNRROFF%LABEL(5),SVAT2SWNRROFF%UNIT(5),SVAT2SWNRROFF%IACT(5),SVAT2SWNRROFF%INSPVAL(5)) SVAT2SWNRROFF%LABEL(1)='SVAT-ID' ; SVAT2SWNRROFF%UNIT(1)='-' SVAT2SWNRROFF%LABEL(2)='SWNR-surface water location identifier' ; SVAT2SWNRROFF%UNIT(2)='-' SVAT2SWNRROFF%LABEL(3)='VXMU-micro-storage capacity' ; SVAT2SWNRROFF%UNIT(3)='m' SVAT2SWNRROFF%LABEL(4)='CRUNOFF-runoff resistance' ; SVAT2SWNRROFF%UNIT(4)='d' SVAT2SWNRROFF%LABEL(5)='CRUNON-runon resistance' ; SVAT2SWNRROFF%UNIT(5)='d' !SVAT2SWNRROFF%LABEL(6)='SLPCN-slope fraction of soil surface (CNM)' ; SVAT2SWNRROFF%UNIT(6)='m/m' SVAT2SWNRROFF%IACT=1 ; SVAT2SWNRROFF%INSPVAL='' MSPINSPECTOR_OPENFILES_SVAT2SWNRROFF=.TRUE. END FUNCTION MSPINSPECTOR_OPENFILES_SVAT2SWNRROFF !###====================================================================== LOGICAL FUNCTION MSPINSPECTOR_PROCESSFILES() !###====================================================================== IMPLICIT NONE INTEGER :: I,JJ,N,NPRGS,IPRGS,IROW,ICOL,IERROR,ISVAT MSPINSPECTOR_PROCESSFILES=.FALSE. NPRGS=50 ; IPRGS=0 CALL WDIALOGSELECT(ID_DIRPROGRESS) ; CALL WDIALOGPUTSTRING(IDF_LABEL1,'Process metaSWAP data........') CALL WDIALOGRANGEPROGRESSBAR(IDF_PROGRESS1,0,NPRGS) !## Read meteo dimensions CALL IDFNULLIFY(METEO) !## fill dates in TAB5 CALL WDIALOGSELECT(ID_DMSPANALYSER_TAB5) !CALL WDIALOGPUTSTRING(IDF_RADIO1,'Use timeserie based on ALL vailable METEO datafiles)') !## set starting date MSPSDATE=UTL_JDATETOIDATE(METEGRID%INFO(2)%JD); CALL UTL_FILLDATESDIALOG(ID_DMSPANALYSER_TAB5,IDF_INTEGER1,IDF_MENU5,IDF_INTEGER2,MSPSDATE) !## to date MSPEDATE=UTL_JDATETOIDATE(METEGRID%INFO(METEGRID%MXID)%JD); CALL UTL_FILLDATESDIALOG(ID_DMSPANALYSER_TAB5,IDF_INTEGER11,IDF_MENU6,IDF_INTEGER12,MSPEDATE) !## read first ascii-files only CALL ASC2IDF_IMPORTASC(METEGRID%INFO(1)%PRECGRID,0.0D0,0.0D0,IERROR,0,IDFIMPORT=METEO); IF(IERROR.EQ.1)RETURN NPRGS=50 ; IPRGS=0 AREASVAT%INFO%REC_IDFSVAT=0.0D0 DO N=1,IDFSVAT%MXID IF(INT(N*NPRGS/IDFSVAT%MXID).GT.IPRGS) THEN ; IPRGS = INT(N*NPRGS/IDFSVAT%MXID) ; CALL WDIALOGSELECT(ID_DIRPROGRESS) ; CALL WDIALOGPUTPROGRESSBAR(IDF_PROGRESS1,IPRGS,ABSOLUTE) ; ENDIF AREASVAT%INFO(IDFSVAT%INFO(N)%SVAT)%REC_IDFSVAT=N ENDDO NPRGS=50 ; IPRGS=0 AREASVAT%INFO%REC_SCAPSVAT=0.0D0 DO N=1,SCAPSVAT%MXID IF(INT(N*NPRGS/SCAPSVAT%MXID).GT.IPRGS) THEN ; IPRGS = INT(N*NPRGS/SCAPSVAT%MXID) ; CALL WDIALOGSELECT(ID_DIRPROGRESS) ; CALL WDIALOGPUTPROGRESSBAR(IDF_PROGRESS1,IPRGS,ABSOLUTE) ; ENDIF AREASVAT%INFO(SCAPSVAT%INFO(N)%SVAT)%REC_SCAPSVAT=N ENDDO !## fill 3 IDFs with 3 SVAT types (rural,urban,irrigation) ! read from IDF_svat, check in areasvat and scapsvat CALL IDFCOPY(MSPIDF,SVATRU) ; CALL IDFCOPY(MSPIDF,SVATUR) ; CALL IDFCOPY(MSPIDF,SVATIR) ; CALL IDFCOPY(MSPIDF,SVATIRS) CALL IDFCOPY(MSPIDF,SCAPSVAT_LYAB) IDFSVAT%INFO%MFID_RURBAN=0.0D0 ; IDFSVAT%INFO%MFID_IRR=0.0D0 NPRGS=50 ; IPRGS=0 ; JJ=1 DO N=1,IDFSVAT%MXID IF(INT(N*NPRGS/IDFSVAT%MXID).GT.IPRGS) THEN ; IPRGS = INT(N*NPRGS/IDFSVAT%MXID) ; CALL WDIALOGSELECT(ID_DIRPROGRESS) ; CALL WDIALOGPUTPROGRESSBAR(IDF_PROGRESS1,IPRGS,ABSOLUTE) ; ENDIF I=IDFSVAT%INFO(N)%SVAT !## assumption, AREA_SVAT file has svat nummer equal to line number IF(AREASVAT%INFO(I)%NUND.NE.I)THEN ; CALL WMESSAGEBOX(OKONLY,EXCLAMATIONICON,COMMONOK,'Expected SVATID='//TRIM(ITOS(I))//' on record '//TRIM(ITOS(I))//' of file AREA_SVAT.INP','Error'); EXIT ; ENDIF IROW=IDFSVAT%INFO(N)%ROW ; ICOL=IDFSVAT%INFO(N)%COL ; ISVAT=IDFSVAT%INFO(N)%SVAT IF(AREASVAT%INFO(I)%LUSE.EQ.18)THEN ; SVATUR%X(ICOL,IROW)=DBLE(ISVAT) ELSE ; SVATRU%X(ICOL,IROW)=DBLE(ISVAT) ; ENDIF !## find and fill irrigation IDF (both target and source SVAT and layer) IF(AREASVAT%INFO(ISVAT)%REC_SCAPSVAT.GT.0) SVATIR%X(ICOL,IROW)=DBLE(SCAPSVAT%INFO(AREASVAT%INFO(ISVAT)%REC_SCAPSVAT)%SVAT) IF(AREASVAT%INFO(ISVAT)%REC_SCAPSVAT.GT.0) SVATIRS%X(ICOL,IROW)=DBLE(SCAPSVAT%INFO(AREASVAT%INFO(ISVAT)%REC_SCAPSVAT)%SVATAB) IF(AREASVAT%INFO(ISVAT)%REC_SCAPSVAT.GT.0) SCAPSVAT_LYAB%X(ICOL,IROW)=DBLE(SCAPSVAT%INFO(AREASVAT%INFO(ISVAT)%REC_SCAPSVAT)%LYAB) ENDDO MSPINSPECTOR_PROCESSFILES=.TRUE. END FUNCTION MSPINSPECTOR_PROCESSFILES !###====================================================================== SUBROUTINE MSPINSPECTOR_GETXY() !###====================================================================== IMPLICIT NONE TYPE(WIN_MESSAGE) :: MESSAGE INTEGER :: ITYPE,ICOL,IROW,JROW,JCOL,ICURSOR,JCURSOR REAL(KIND=DP_KIND) :: MOUSEX,MOUSEY,X1,Y1,X2,Y2 LOGICAL :: LEX CALL WCURSORSHAPE(ID_CURSORIDFVALUE) CALL IGRLINETYPE(OUTLINE); CALL IGRLINEWIDTH(3); CALL IGRCOLOURN(UTL_INVERSECOLOUR(WRGB(255,0,0))); CALL IGRPLOTMODE(MODEXOR) IROW=0; ICOL=0; LEX=.FALSE.; JCURSOR=ID_CURSORIDFVALUE ! CALL MSPINSPECTOR_CLEANGRIDS() !## disable tab and bottons while hoovering CALL MSPINSPECTOR_HANDLEFIELD(0) !## remove old drawn rectangle CALL MSPINSPECTOR_REMRECT() !## hoover till EXIT DO CALL WMESSAGE(ITYPE,MESSAGE) ICURSOR=WINFOMOUSE(MOUSECURSOR) SELECT CASE (MESSAGE%WIN) CASE (1); JCURSOR=ID_CURSORIDFVALUE CASE (ID_DMSPANALYSER); JCURSOR=CURARROW END SELECT IF(ICURSOR.NE.JCURSOR)CALL WCURSORSHAPE(ID_CURSORIDFVALUE) !## shift mouse coordinates MOUSEX=DBLE(MESSAGE%GX)+OFFSETX MOUSEY=DBLE(MESSAGE%GY)+OFFSETY SELECT CASE (ITYPE) !## mouse-move CASE (MOUSEMOVE) CALL WINDOWSELECT(0) CALL WINDOWOUTSTATUSBAR(1,'x = '//TRIM(RTOS(MOUSEX,'F',3))//' m; y = '//TRIM(RTOS(MOUSEY,'F',3))//' m') CALL WDIALOGSELECT(ID_DMSPANALYSER_TAB2) CALL WGRIDPUTCELLDOUBLE(IDF_GRID3,2,2,MOUSEX,'(F15.3)') CALL WGRIDPUTCELLDOUBLE(IDF_GRID3,3,2,MOUSEY,'(F15.3)') IF(MOUSEX.GE.MSPIDF%XMIN.AND.MOUSEX.LE.MSPIDF%XMAX.AND.MOUSEY.GE.MSPIDF%YMIN.AND.MOUSEY.LE.MSPIDF%YMAX) THEN CALL IDFIROWICOL(MSPIDF,JROW,JCOL,MOUSEX,MOUSEY) IF(ICOL.NE.JCOL.OR.IROW.NE.JROW)THEN CALL IGRCOLOURN(UTL_INVERSECOLOUR(WRGB(255,0,0))) CALL UTL_PLOT1BITMAP() !## remove drawn rectangle IF(LEX)THEN CALL IDFGETEDGE(MSPIDF,IROW,ICOL,X1,Y1,X2,Y2) CALL DBL_IGRRECTANGLE(X1,Y1,X2,Y2,IOFFSET=1) ENDIF !## drawn new rectangle CALL IDFGETEDGE(MSPIDF,JROW,JCOL,X1,Y1,X2,Y2) CALL DBL_IGRRECTANGLE(X1,Y1,X2,Y2,IOFFSET=1) CALL UTL_PLOT2BITMAP() IROW=JROW; ICOL=JCOL; LEX=.TRUE. !## fill GRID only if MF cell contains SVAT CALL MSPINSPECTOR_GETXY_PUTVALUES(JROW,JCOL) ! Important CAll: get local parameter data ENDIF ELSE !## remove drawn rectangle IF(LEX)THEN CALL IGRCOLOURN(UTL_INVERSECOLOUR(WRGB(255,0,0))) CALL UTL_PLOT1BITMAP() CALL IDFGETEDGE(MSPIDF,IROW,ICOL,X1,Y1,X2,Y2) CALL DBL_IGRRECTANGLE(X1,Y1,X2,Y2,IOFFSET=1) CALL UTL_PLOT2BITMAP() CALL MSPINSPECTOR_CLEANGRIDS() LEX=.FALSE. ENDIF ENDIF !## mouse button pressed CASE (MOUSEBUTDOWN) SELECT CASE (MESSAGE%VALUE1) CASE (RIGHTBUTTON) !## Exit hoover modus WITH removing drawn rectangle IF(LEX)THEN CALL IGRCOLOURN(UTL_INVERSECOLOUR(WRGB(255,0,0))) CALL UTL_PLOT1BITMAP() CALL IDFGETEDGE(MSPIDF,IROW,ICOL,X1,Y1,X2,Y2) CALL DBL_IGRRECTANGLE(X1,Y1,X2,Y2,IOFFSET=1) CALL UTL_PLOT2BITMAP() ENDIF CALL MSPINSPECTOR_CLEANGRIDS() EXIT CASE (LEFTBUTTON) !## Exit hoover modus WITHOUT removing drawn rectangle EXIT END SELECT !## bitmap scrolled, renew top-left pixel coordinates CASE (BITMAPSCROLLED) MPW%IX=MESSAGE%VALUE1 MPW%IY=MESSAGE%VALUE2 END SELECT ENDDO !## enable tabs and bottons after hoovering CALL MSPINSPECTOR_HANDLEFIELD(1) CALL WCURSORSHAPE(CURARROW) CALL IGRLINETYPE(OUTLINE); CALL IGRLINEWIDTH(1); CALL IGRCOLOURN((WRGB(0,0,0))); CALL IGRPLOTMODE(MODECOPY) END SUBROUTINE MSPINSPECTOR_GETXY !###====================================================================== SUBROUTINE MSPINSPECTOR_GETXY_PUTVALUES(IROW,ICOL) !###====================================================================== IMPLICIT NONE INTEGER,INTENT(IN) :: IROW,ICOL REAL(KIND=DP_KIND) :: X1,Y1,X2,Y2,NOPP,DX,DY,R INTEGER :: JROW,JCOL,T,I,J,N,IREXIST,SVATID,IMF,RADIO1,ISVAT,IREC INTEGER,DIMENSION(3+1) :: SVATINDEX_AREA ! Position of actual rural/irrigation/urban svat in AreaSVAT + selected SVAT on tab3 INTEGER,DIMENSION(3+1) :: SVATINDEX_MOD ! Position of actual rural/irrigation source/urban svat in MOD2SVAT + selected SVAT on tab3 INTEGER :: LUSEINDEX,SCAPINDEX LOGICAL :: LEX LEX=.FALSE. ; SCAPINDEX=0 !## No SVAT? exit routine, empty GRID fields and remove irrigation rectangles IF(SVATRU%X(ICOL,IROW).EQ.0.AND.SVATUR%X(ICOL,IROW).EQ.0)THEN CALL WDIALOGSELECT(ID_DMSPANALYSER_TAB2) IF(WInfoGridCell(IDF_GRID2,1,1,1).EQ.0)THEN RETURN !# no data in fields, no cleanup ELSE CALL MSPINSPECTOR_CLEANGRIDS() ; RETURN ENDIF ENDIF SVATINDEX_AREA(1)=INT(SVATRU%X(ICOL,IROW)) ! rural SVATINDEX_AREA(2)=INT(SVATIR%X(ICOL,IROW)) ! irrigation SVATINDEX_AREA(3)=INT(SVATUR%X(ICOL,IROW)) ! urban SVATINDEX_AREA(4)=0 ! default !!## Find location/record of all SVAT ID's (max 2) from MOD2SVAT file SVATINDEX_MOD=0 DO I=1,MODSVAT%MXID IF(SVATINDEX_AREA(1).EQ.MODSVAT%INFO(I)%SVATID.AND.SVATINDEX_MOD(1).EQ.0)THEN SVATINDEX_MOD(1)=I ! rural IF(SVATINDEX_AREA(2).EQ.MODSVAT%INFO(I)%SVATID.AND.SCAPSVAT_LYAB%X(ICOL,IROW).EQ.MODSVAT%INFO(I)%LY) SVATINDEX_MOD(2)=I ! irrigation, might be overruled IF(I.EQ.MODSVAT%MXID) EXIT IF(SVATINDEX_AREA(2).EQ.MODSVAT%INFO(I+1)%SVATID.AND.SCAPSVAT_LYAB%X(ICOL,IROW).EQ.MODSVAT%INFO(I+1)%LY) SVATINDEX_MOD(2)=I+1 ! irrigation (source!) ENDIF DO J=I,MODSVAT%MXID IF(SVATINDEX_AREA(3).EQ.MODSVAT%INFO(J)%SVATID) SVATINDEX_MOD(3)=J ! urban EXIT ENDDO ENDDO !## start filling grids, first clean CALL MSPINSPECTOR_CLEANGRIDS() !## fill Rural data (TAB2) IF(SVATINDEX_MOD(1).NE.0)THEN CALL WDIALOGSELECT(ID_DMSPANALYSER_TAB2) CALL WGridPutCellINTEGER(IDF_GRID1,2,1, MODSVAT%INFO(SVATINDEX_MOD(1))%SVATID) CALL WGridPutCellINTEGER(IDF_GRID1,3,1, MODSVAT%INFO(SVATINDEX_MOD(1))%MFID) CALL WGridPutCellINTEGER(IDF_GRID1,4,1,DXC%INFO(MODSVAT%INFO(SVATINDEX_MOD(1))%MFID)%IROW) CALL WGridPutCellINTEGER(IDF_GRID1,5,1,DXC%INFO(MODSVAT%INFO(SVATINDEX_MOD(1))%MFID)%ICOL) CALL WGridPutCellINTEGER(IDF_GRID1,6,1, MODSVAT%INFO(SVATINDEX_MOD(1))%LY) ENDIF !## fill Irrigation data (TAB2)) IF(SVATINDEX_MOD(2).NE.0)THEN CALL WDIALOGSELECT(ID_DMSPANALYSER_TAB2) !choise: display row/col from DXC (not IDFSVAT) CALL WGridPutCellINTEGER(IDF_GRID1,2,2, MODSVAT%INFO(SVATINDEX_MOD(2))%SVATID) CALL WGridPutCellINTEGER(IDF_GRID1,3,2, MODSVAT%INFO(SVATINDEX_MOD(2))%MFID) CALL WGridPutCellINTEGER(IDF_GRID1,4,2,DXC%INFO(MODSVAT%INFO(SVATINDEX_MOD(2))%MFID)%IROW) CALL WGridPutCellINTEGER(IDF_GRID1,5,2,DXC%INFO(MODSVAT%INFO(SVATINDEX_MOD(2))%MFID)%ICOL) CALL WGridPutCellINTEGER(IDF_GRID1,6,2, MODSVAT%INFO(SVATINDEX_MOD(2))%LY) ENDIF !## fill Urban data (TAB2) IF(SVATINDEX_MOD(3).NE.0)THEN CALL WDIALOGSELECT(ID_DMSPANALYSER_TAB2) CALL WGridPutCellINTEGER(IDF_GRID1,2,3, MODSVAT%INFO(SVATINDEX_MOD(3))%SVATID) CALL WGridPutCellINTEGER(IDF_GRID1,3,3, MODSVAT%INFO(SVATINDEX_MOD(3))%MFID) CALL WGridPutCellINTEGER(IDF_GRID1,4,3,DXC%INFO(MODSVAT%INFO(SVATINDEX_MOD(3))%MFID)%IROW) CALL WGridPutCellINTEGER(IDF_GRID1,5,3,DXC%INFO(MODSVAT%INFO(SVATINDEX_MOD(3))%MFID)%ICOL) CALL WGridPutCellINTEGER(IDF_GRID1,6,3, MODSVAT%INFO(SVATINDEX_MOD(3))%LY) ENDIF !## start put AREA data (TAB2) CALL IDFGETDXDY(MSPIDF,ICOL,IROW,DX,DY) ; NOPP=DX*DY CALL WDIALOGSELECT(ID_DMSPANALYSER_TAB2) IF(SVATINDEX_MOD(1).NE.0)THEN DO I=1,AREASVAT%MXID IF(MODSVAT%INFO(SVATINDEX_MOD(1))%SVATID.EQ.AREASVAT%INFO(I)%NUND)THEN CALL WGridPutCellDOUBLE(IDF_GRID1,7,1,AREASVAT%INFO(I)%ARK,'(F8.1)') NOPP=NOPP-AREASVAT%INFO(I)%ARK IF(SVATINDEX_MOD(3).NE.0.AND.I+1.LE.AREASVAT%MXID)THEN ! assumption : if present, the Urban SVAT always follows the rural svat directely IF(MODSVAT%INFO(SVATINDEX_MOD(3))%SVATID.EQ.AREASVAT%INFO(I+1)%NUND)THEN CALL WGridPutCellDOUBLE(IDF_GRID1,7,3,AREASVAT%INFO(I+1)%ARK,'(F8.1)') NOPP=NOPP-AREASVAT%INFO(I+1)%ARK ENDIF ENDIF EXIT ENDIF ENDDO ENDIF CALL WGridPutCellDOUBLE(IDF_GRID1,7,4,NOPP,'(F8.1)') !## fill XY data (TAB2) CALL IDFGETLOC(MSPIDF,IROW,ICOL,X1,Y1) CALL WDIALOGSELECT(ID_DMSPANALYSER_TAB2) CALL WGRIDPUTCELLDOUBLE(IDF_GRID3,2,1,X1,'(F15.3)') CALL WGRIDPUTCELLDOUBLE(IDF_GRID3,3,1,Y1,'(F15.3)') !## fill grid with METEOGRID data and IDFSVAT (TAB2) CALL WDIALOGSELECT(ID_DMSPANALYSER_TAB2) IF(SVATRU%X(ICOL,IROW).GT.0) THEN I=INT(SVATRU%X(ICOL,IROW)) CALL WGridPutCellInteger(IDF_GRID2,1,1,I) CALL WGridPutCellInteger(IDF_GRID2,2,1,IDFSVAT%INFO(AREASVAT%INFO(I)%REC_IDFSVAT)%ROW) CALL WGridPutCellInteger(IDF_GRID2,3,1,IDFSVAT%INFO(AREASVAT%INFO(I)%REC_IDFSVAT)%COL) IF(SVATPREC%INFO(I)%SVAT.NE.I)THEN CALL WMESSAGEBOX(OKONLY,EXCLAMATIONICON,COMMONOK,'Expected SVAT='//TRIM(ITOS(SVATPREC%INFO(I)%SVAT))//' on line '//TRIM(ITOS(I))//' of file SVAT2PRECGRID.INP','Error'); RETURN ENDIF CALL WGRIDPUTCELLINTEGER(IDF_GRID4,1,1,I) ; CALL WGRIDPUTCELLINTEGER(IDF_GRID5,1,1,I) CALL WGRIDPUTCELLINTEGER(IDF_GRID4,2,1,SVATPREC%INFO(I)%ROW) ; CALL WGRIDPUTCELLINTEGER(IDF_GRID5,2,1,SVATETREF%INFO(I)%ROW) CALL WGRIDPUTCELLINTEGER(IDF_GRID4,3,1,SVATPREC%INFO(I)%COLUMN) ; CALL WGRIDPUTCELLINTEGER(IDF_GRID5,3,1,SVATETREF%INFO(I)%COLUMN) ENDIF IF(SVATUR%X(ICOL,IROW).GT.0) THEN I=INT(SVATUR%X(ICOL,IROW)) CALL WGridPutCellInteger(IDF_GRID2,1,2,I) CALL WGridPutCellInteger(IDF_GRID2,2,2,IDFSVAT%INFO(AREASVAT%INFO(I)%REC_IDFSVAT)%ROW) CALL WGridPutCellInteger(IDF_GRID2,3,2,IDFSVAT%INFO(AREASVAT%INFO(I)%REC_IDFSVAT)%COL) CALL WGRIDPUTCELLINTEGER(IDF_GRID4,1,2,I) ; CALL WGRIDPUTCELLINTEGER(IDF_GRID5,1,2,I) CALL WGRIDPUTCELLINTEGER(IDF_GRID4,2,2,SVATPREC%INFO(I)%ROW) ; CALL WGRIDPUTCELLINTEGER(IDF_GRID5,2,2,SVATETREF%INFO(I)%ROW) CALL WGRIDPUTCELLINTEGER(IDF_GRID4,3,2,SVATPREC%INFO(I)%COLUMN) ; CALL WGRIDPUTCELLINTEGER(IDF_GRID5,3,2,SVATETREF%INFO(I)%COLUMN) ENDIF !## start put data (TAB3) !## for items 1. DXC / 2 MOD2SVAT / 3. IDF_SVAT / 4. AREA_SVAT / 5. LUSE_SVAT / 6. FACT_SVAT / !##. 7. INFI_SVAT / 8. SCAP_SVAT / 9. METE_GRID / 10. SVATPREC / 11. SVATETREF !## read button Urban/Rural CALL WDIALOGSELECT(ID_DMSPANALYSER_TAB3) CALL WDIALOGGETRADIOBUTTON(IDF_RADIO1,RADIO1) ISVAT=0 !## only get parameterdata if selected type (urban/rural) exists in present cell IF((RADIO1.EQ.1.AND.SVATRU%X(ICOL,IROW).GT.0).OR.(RADIO1.EQ.2.AND.SVATUR%X(ICOL,IROW).GT.0))THEN IF(RADIO1.EQ.1) THEN ; ISVAT=INT(SVATRU%X(ICOL,IROW)) ; SVATINDEX_MOD(4)=SVATINDEX_MOD(1) ; SVATINDEX_AREA(4)=SVATINDEX_AREA(1); ENDIF IF(RADIO1.EQ.2) THEN ; ISVAT=INT(SVATUR%X(ICOL,IROW)) ; SVATINDEX_MOD(4)=SVATINDEX_MOD(3) ; SVATINDEX_AREA(4)=SVATINDEX_AREA(3); ENDIF !## find DXC parameters (1) IREC= MODSVAT%INFO(SVATINDEX_MOD(4))%MFID DXC%INSPVAL(1)=ITOS(DXC%INFO(IREC)%ILAY) DXC%INSPVAL(2)=ITOS(DXC%INFO(IREC)%IROW) DXC%INSPVAL(3)=ITOS(DXC%INFO(IREC)%ICOL) DXC%INSPVAL(4)=ITOS(DXC%INFO(IREC)%MFID) !## find MODSVAT parameters (2) IREC= SVATINDEX_MOD(4) MODSVAT%INSPVAL(1)=ITOS(MODSVAT%INFO(SVATINDEX_MOD(4))%MFID) MODSVAT%INSPVAL(2)=ITOS(MODSVAT%INFO(SVATINDEX_MOD(4))%SVATID) MODSVAT%INSPVAL(3)=ITOS(MODSVAT%INFO(SVATINDEX_MOD(4))%LY) !## find IDFSVAT parameters (3) IREC= AREASVAT%INFO(ISVAT)%REC_IDFSVAT IDFSVAT%INSPVAL(1)=ITOS(IDFSVAT%INFO(IREC)%SVAT) IDFSVAT%INSPVAL(2)=ITOS(IDFSVAT%INFO(IREC)%ROW) IDFSVAT%INSPVAL(3)=ITOS(IDFSVAT%INFO(IREC)%COL) IDFSVAT%INSPVAL(4)=UTL_REALTOSTRING(IDFSVAT%INFO(IREC)%X_CORD) IDFSVAT%INSPVAL(5)=UTL_REALTOSTRING(IDFSVAT%INFO(IREC)%Y_CORD) !## find AREASVAT parameters (4) IREC= SVATINDEX_AREA(4) IF(AREASVAT%INFO(IREC)%NUND.NE.IREC)THEN CALL WMESSAGEBOX(OKONLY,EXCLAMATIONICON,COMMONOK,'Expected SVAT='//TRIM(ITOS(IREC))//' on element '//TRIM(ITOS(IREC))//' of file AREA_SVAT.INP','Error'); RETURN ENDIF AREASVAT%INSPVAL(1)=ITOS(AREASVAT%INFO(IREC)%NUND) AREASVAT%INSPVAL(2)=UTL_REALTOSTRING(AREASVAT%INFO(IREC)%ARK) AREASVAT%INSPVAL(3)=UTL_REALTOSTRING(AREASVAT%INFO(IREC)%SURF) AREASVAT%INSPVAL(4)=UTL_REALTOSTRING(AREASVAT%INFO(IREC)%TEMP) AREASVAT%INSPVAL(5)=ITOS(AREASVAT%INFO(IREC)%SOIL) AREASVAT%INSPVAL(6)=ITOS(AREASVAT%INFO(IREC)%LUSE) AREASVAT%INSPVAL(7)=UTL_REALTOSTRING(AREASVAT%INFO(IREC)%RZ) AREASVAT%INSPVAL(8)=ITOS(AREASVAT%INFO(IREC)%METE) AREASVAT%INSPVAL(9)=UTL_REALTOSTRING(AREASVAT%INFO(IREC)%LCFPREP) AREASVAT%INSPVAL(10)=UTL_REALTOSTRING(AREASVAT%INFO(IREC)%LCFPOT) !## find LUSE_SVAT parameters (5) DO N=1,LUSESVAT%MXID IF(TRIM(AREASVAT%INSPVAL(6)).EQ.ITOS(LUSESVAT%INFO(N)%LU))THEN LUSESVAT%INSPVAL(1)=ITOS(LUSESVAT%INFO(N)%LU) LUSESVAT%INSPVAL(2)=TRIM(LUSESVAT%INFO(N)%LUNA) LUSESVAT%INSPVAL(3)=ITOS(LUSESVAT%INFO(N)%VGLU) LUSESVAT%INSPVAL(4)=UTL_REALTOSTRING(LUSESVAT%INFO(N)%ALPHACRIT) LUSESVAT%INSPVAL(5)=UTL_REALTOSTRING(LUSESVAT%INFO(N)%P1FD) LUSESVAT%INSPVAL(6)=UTL_REALTOSTRING(LUSESVAT%INFO(N)%P2FD) LUSESVAT%INSPVAL(7)=UTL_REALTOSTRING(LUSESVAT%INFO(N)%P3HFD) LUSESVAT%INSPVAL(8)=UTL_REALTOSTRING(LUSESVAT%INFO(N)%P3LFD) LUSESVAT%INSPVAL(9)=UTL_REALTOSTRING(LUSESVAT%INFO(N)%P4FD) LUSESVAT%INSPVAL(10)=UTL_REALTOSTRING(LUSESVAT%INFO(N)%T3HFD) LUSESVAT%INSPVAL(11)=UTL_REALTOSTRING(LUSESVAT%INFO(N)%T3LFD) LUSESVAT%INSPVAL(12)=UTL_REALTOSTRING(LUSESVAT%INFO(N)%PBGSPLU) LUSESVAT%INSPVAL(13)=UTL_REALTOSTRING(LUSESVAT%INFO(N)%FREVSPLU) LUSESVAT%INSPVAL(14)=UTL_REALTOSTRING(LUSESVAT%INFO(N)%GISPLU) LUSESVAT%INSPVAL(15)=UTL_REALTOSTRING(LUSESVAT%INFO(N)%TIGISPLU) LUSESVAT%INSPVAL(16)=UTL_REALTOSTRING(LUSESVAT%INFO(N)%RPSPLU) LUSESVAT%INSPVAL(17)=UTL_REALTOSTRING(LUSESVAT%INFO(N)%TDBGSPLU) LUSESVAT%INSPVAL(18)=UTL_REALTOSTRING(LUSESVAT%INFO(N)%TDEDSPLU) EXIT ENDIF ENDDO !## find FACT_SVAT parameters (6) FACTSVAT%INSPVAL='only graph' FACTSVAT%INSPVAL(1)=LUSESVAT%INSPVAL(3) !## find INFI_SVAT parameters (7) CALL WDIALOGGETRADIOBUTTON(IDF_RADIO1,RADIO1) N=ISVAT ! assumption: recordnumber is line number IF(INT(N).NE.INFISVAT%INFO(N)%NUND)THEN CALL WMESSAGEBOX(OKONLY,EXCLAMATIONICON,COMMONOK,'Expected SVAT='//TRIM(ITOS(N))//' on line '//TRIM(ITOS(N))//' of file INFI_SVAT.INP','Error'); RETURN ; ENDIF INFISVAT%INSPVAL(1)=ITOS(INFISVAT%INFO(N)%NUND) INFISVAT%INSPVAL(2)=UTL_REALTOSTRING(INFISVAT%INFO(N)%QINBASIC) INFISVAT%INSPVAL(3)=UTL_REALTOSTRING(INFISVAT%INFO(N)%CTOP_DOWN) INFISVAT%INSPVAL(4)=UTL_REALTOSTRING(INFISVAT%INFO(N)%CTOP_UP) INFISVAT%INSPVAL(5)=UTL_REALTOSTRING(INFISVAT%INFO(N)%CBOT) INFISVAT%INSPVAL(6)=UTL_REALTOSTRING(INFISVAT%INFO(N)%SC2) !## find SCAP_SVAT parameters (8) SCAPSVAT%INSPVAL=' ' N=AREASVAT%INFO(ISVAT)%REC_SCAPSVAT IF(N.GT.0)THEN IF(ISVAT.NE.SCAPSVAT%INFO(N)%SVAT)THEN CALL WMESSAGEBOX(OKONLY,EXCLAMATIONICON,COMMONOK,'Expected SVAT='//TRIM(ITOS(N))//' on line '//TRIM(ITOS(N))//' of file SCAP_SVAT.INP','Error'); RETURN ; ENDIF SCAPSVAT%INSPVAL(1)=ITOS(SCAPSVAT%INFO(N)%SVAT) SCAPSVAT%INSPVAL(2)=UTL_REALTOSTRING(SCAPSVAT%INFO(N)%FMMXABGW) SCAPSVAT%INSPVAL(3)=UTL_REALTOSTRING(SCAPSVAT%INFO(N)%FMMXABSW) SCAPSVAT%INSPVAL(4)=UTL_REALTOSTRING(SCAPSVAT%INFO(N)%FXABGW) SCAPSVAT%INSPVAL(5)=UTL_REALTOSTRING(SCAPSVAT%INFO(N)%FXABSW) SCAPSVAT%INSPVAL(6)=ITOS(SCAPSVAT%INFO(N)%SVATAB) SCAPSVAT%INSPVAL(7)=ITOS(SCAPSVAT%INFO(N)%LYAB) SCAPSVAT%INSPVAL(8)=ITOS(SCAPSVAT%INFO(N)%SWNRAB) ELSE ENDIF !## find METE_GRID parameters (9) METEGRID%INSPVAL='only graph' !## find SVATPREC parameters (10) I=ISVAT ! assumption: recordnumber is line number IF(ISVAT.NE.SVATPREC%INFO(I)%SVAT)THEN CALL WMESSAGEBOX(OKONLY,EXCLAMATIONICON,COMMONOK,'Expected SVAT='//TRIM(ITOS(I))//' on line '//TRIM(ITOS(I))//' of file SVAT2PRECGRID.INP','Error'); RETURN ; ENDIF SVATPREC%INSPVAL(1)=ITOS(SVATPREC%INFO(I)%SVAT) SVATPREC%INSPVAL(2)=ITOS(SVATPREC%INFO(I)%ROW) SVATPREC%INSPVAL(3)=ITOS(SVATPREC%INFO(I)%COLUMN) !## find SVATETREF parameters (11) I=ISVAT ! assumption: recordnumber is line number IF(ISVAT.NE.SVATETREF%INFO(I)%SVAT)THEN CALL WMESSAGEBOX(OKONLY,EXCLAMATIONICON,COMMONOK,'Expected SVAT='//TRIM(ITOS(I))//' on line '//TRIM(ITOS(I))//' of file SVAT2ETREFGRID.INP','Error'); RETURN ; ENDIF SVATETREF%INSPVAL(1)=ITOS(SVATETREF%INFO(I)%SVAT) SVATETREF%INSPVAL(2)=ITOS(SVATETREF%INFO(I)%ROW) SVATETREF%INSPVAL(3)=ITOS(SVATETREF%INFO(I)%COLUMN) !## find SVAT2SWNRROFF parameters (12) I=ISVAT ! assumption: recordnumber is line number IF(ISVAT.NE.SVAT2SWNRROFF%INFO(I)%SVAT)THEN CALL WMESSAGEBOX(OKONLY,EXCLAMATIONICON,COMMONOK,'Expected SVAT='//TRIM(ITOS(I))//' on line '//TRIM(ITOS(I))//' of file SVAT2SWNR_ROFF.INP','Error'); RETURN ; ENDIF SVAT2SWNRROFF%INSPVAL(1)=ITOS(SVAT2SWNRROFF%INFO(I)%SVAT) SVAT2SWNRROFF%INSPVAL(2)=ITOS(SVAT2SWNRROFF%INFO(I)%SWNR) SVAT2SWNRROFF%INSPVAL(3)=UTL_REALTOSTRING(SVAT2SWNRROFF%INFO(I)%VXMU) SVAT2SWNRROFF%INSPVAL(4)=UTL_REALTOSTRING(SVAT2SWNRROFF%INFO(I)%CRUNOFF) SVAT2SWNRROFF%INSPVAL(5)=UTL_REALTOSTRING(SVAT2SWNRROFF%INFO(I)%CRUNON) !SVAT2SWNRROFF%INSPVAL(6)=UTL_REALTOSTRING(SVAT2SWNRROFF%INFO(I)%SLPCN) ELSE DXC%INSPVAL='' MODSVAT%INSPVAL='' IDFSVAT%INSPVAL='' AREASVAT%INSPVAL='' LUSESVAT%INSPVAL='' FACTSVAT%INSPVAL='' INFISVAT%INSPVAL='' SCAPSVAT%INSPVAL='' METEGRID%INSPVAL='' SVATPREC%INSPVAL='' SVATETREF%INSPVAL='' SVAT2SWNRROFF%INSPVAL='' ENDIF CALL MSPINSPECTOR_TAB3_PUTPARAMVALUE !## Handle irrigation data (TAB 4) IF(SVATIR%X(ICOL,IROW).NE.0)THEN !## fill irrigation cell info SVATID=SVATIR%X(ICOL,IROW) CALL WDIALOGSELECT(ID_DMSPANALYSER_TAB4) CALL WGridPutCellINTEGER(IDF_GRID1,1,1,IROW) CALL WGridPutCellINTEGER(IDF_GRID1,2,1,ICOL) CALL WGridPutCellINTEGER(IDF_GRID1,3,1,SVATID) CALL WGridPutCellINTEGER(IDF_GRID1,4,1,MODSVAT%INFO(SVATINDEX_MOD(2))%MFID) !## fill irrigation cell info: source IREC=AREASVAT%INFO(SVATID)%REC_SCAPSVAT IF(SCAPSVAT%INFO(IREC)%FMMXABSW.GT.0) CALL WGridPutCellSTRING(IDF_GRID1,5,1,'SW') IF(SCAPSVAT%INFO(IREC)%FMMXABGW.GT.0) THEN CALL WGridPutCellSTRING(IDF_GRID1,5,1,'GW') CALL WGridPutCellINTEGER(IDF_GRID1,6,1,INT(SCAPSVAT_LYAB%X(ICOL,IROW))) CALL MSPINSPECTOR_SVAT2ROWCOL(INT(SVATIRS%X(ICOL,IROW)),JROW,JCOL,IMF) CALL WGridPutCellINTEGER(IDF_GRID1,7,1,IMF) ENDIF IF(SVATINDEX_AREA(4).GT.0)THEN ; LUSEINDEX=AREASVAT%INFO(SVATINDEX_AREA(4))%LUSE ; ELSE ; LUSEINDEX=0 ; ENDIF DO I=1,LUSESVAT%MXID !## search for applicable landuse parameters IF(LUSEINDEX.EQ.LUSESVAT%INFO(I)%LU)THEN CALL WGridPutCellDOUBLE(IDF_GRID2,1,1,LUSESVAT%INFO(I)%TDBGSPLU,'(F6.0)') CALL WGridPutCellDOUBLE(IDF_GRID2,2,1,LUSESVAT%INFO(I)%TDEDSPLU,'(F6.0)') CALL WGridPutCellDOUBLE(IDF_GRID2,3,1,LUSESVAT%INFO(I)%RPSPLU,'(F6.0)') CALL WGridPutCellDOUBLE(IDF_GRID2,4,1,LUSESVAT%INFO(I)%PBGSPLU,'(F8.0)') CALL WGridPutCellDOUBLE(IDF_GRID2,5,1,LUSESVAT%INFO(I)%TIGISPLU,UTL_GETFORMAT(LUSESVAT%INFO(I)%TIGISPLU)) CALL WGridPutCellDOUBLE(IDF_GRID2,6,1,LUSESVAT%INFO(I)%GISPLU,'(F8.0)') EXIT ENDIF ENDDO !## Find and Fill section 2 op Tab 4 - related IRR locations CALL WDIALOGGETCHECKBOX(IDF_CHECK1,IREXIST) !## check if section should be filled IREC=AREASVAT%INFO(SVATID)%REC_SCAPSVAT ! Line in file SCAPSVAT IF(IREXIST.EQ.1.AND.SCAPSVAT%INFO(IREC)%FMMXABGW.GT.0)THEN !## checkbox is on and irrigation source is Groundwater CALL WDIALOGSELECT(ID_DMSPANALYSER_TAB4) CALL MSPINSPECTOR_CLEANSCAPPOINTER() !## remove drawn irrigation rectangles CALL UTL_PLOT1BITMAP() MSPIDF%X=0.0D0 ; T=0 !## A. fill and draw irrigation source SVATID=SCAPSVAT%INFO(IREC)%SVATAB ! svat irr source CALL MSPINSPECTOR_SVAT2ROWCOL(SVATID,JROW,JCOL,IMF) !K=0 DO J=SVATID,MODSVAT%MXID !## search for record in MOD2SVAT !## change if content of MOD2SVAT is complete IF(SCAPSVAT%INFO(IREC)%SVATAB.EQ.MODSVAT%INFO(J)%SVATID.AND.& SCAPSVAT%INFO(IREC)%LYAB.EQ.MODSVAT%INFO(J)%LY)THEN ; IREC=J; EXIT ; ENDIF !IF(SCAPSVAT%INFO(IREC)%SVATAB.EQ.MODSVAT%INFO(J)%SVATID)THEN ! K=J ! IF(SCAPSVAT%INFO(IREC)%LYAB.EQ.MODSVAT%INFO(J)%LY)THEN ; K=J; EXIT ; ENDIF !ENDIF ENDDO !IREC=K !## source cell: Display row/col IF(IDFCHECKRC(MSPIDF,JROW,JCOL))THEN CALL IGRFILLPATTERN(SOLID) CALL IDFGETLOC(MSPIDF,JROW,JCOL,X1,Y1) ; R=0.5*DX ; CALL DBL_IGRCIRCLE(X1,Y1,R,IOFFSET=1) X2=X1 ; Y2=Y1 CALL WGridPutCellInteger(IDF_GRID3,1,1,JROW) CALL WGridPutCellInteger(IDF_GRID3,2,1,JCOL) ENDIF !## sourve cell: Display rowIDs CALL WGRIDGETCELLINTEGER(IDF_GRID1,6,1,I) ; CALL WGridPutCellInteger(IDF_GRID3,3,1,I) CALL WGridPutCellInteger(IDF_GRID3,4,1,INT(SVATIRS%X(ICOL,IROW))) CALL WGRIDGETCELLINTEGER(IDF_GRID1,7,1,I) ; CALL WGridPutCellInteger(IDF_GRID3,5,1,I) !## B. fill and draw irrigation targets DO I=1,SCAPSVAT%MXID IF(SVATID.EQ.SCAPSVAT%INFO(I)%SVATAB)THEN CALL MSPINSPECTOR_SVAT2ROWCOL(SCAPSVAT%INFO(I)%SVAT,JROW,JCOL,IMF) IF(IDFCHECKRC(MSPIDF,JROW,JCOL))THEN T=T+1 IREC=0 DO J=SCAPSVAT%INFO(I)%SVAT,MODSVAT%MXID IF(SCAPSVAT%INFO(I)%SVAT.EQ.MODSVAT%INFO(J)%SVATID)THEN ; IREC=J; EXIT ; ENDIF ! 1st SVAT is irrigation SVAT, 2nd SVAT can be deeper irigation source ENDDO CALL WGridPutCellInteger(IDF_GRID4,1,T,JROW) CALL WGridPutCellInteger(IDF_GRID4,2,T,JCOL) CALL WGridPutCellInteger(IDF_GRID4,3,T,MODSVAT%INFO(IREC)%LY) CALL WGridPutCellInteger(IDF_GRID4,4,T,MODSVAT%INFO(IREC)%SVATID) CALL WGridPutCellInteger(IDF_GRID4,5,T,MODSVAT%INFO(IREC)%MFID) !## drawn new rectangles MSPIDF%X(JCOL,JROW)=MSPIDF%X(JCOL,JROW) + 1.0D0 IF(MSPIDF%X(JCOL,JROW).EQ.1)THEN CALL IDFGETLOC(MSPIDF,JROW,JCOL,X1,Y1) CALL DBL_IGRJOIN(X1,Y1,X2,Y2,IOFFSET=1) CALL IGRCOLOURN(UTL_INVERSECOLOUR(WRGB(0,0,255))) !## blue rectancle for irrigation cells CALL IGRFILLPATTERN(OUTLINE) CALL IDFGETLOC(MSPIDF,JROW,JCOL,X1,Y1) ; R=0.4*DX ; CALL DBL_IGRCIRCLE(X1,Y1,R,IOFFSET=1) ENDIF ENDIF ENDIF ENDDO ! I loop CALL UTL_PLOT2BITMAP() CALL IGRFILLPATTERN(OUTLINE) ENDIF ! draw irrigation data ENDIF END SUBROUTINE MSPINSPECTOR_GETXY_PUTVALUES !###====================================================================== SUBROUTINE MSPINSPECTOR_MAIN_FIELDS() !###====================================================================== IMPLICIT NONE END SUBROUTINE MSPINSPECTOR_MAIN_FIELDS !###====================================================================== SUBROUTINE MSPINSPECTOR_TAB1_FIELDS() !###====================================================================== IMPLICIT NONE INTEGER :: I CALL MSPINSPECTOR_OPENFILES_FIELDS(0) CALL WDIALOGSELECT(ID_DMSPANALYSER_TAB1) CALL WDIALOGGETRADIOBUTTON(IDF_RADIO1,I) CALL WDIALOGFIELDSTATE(IDF_STRING1,I) CALL WDIALOGFIELDSTATE(ID_SELECT,I) !## refill menu of folders CALL MSPINSPECTOR_FILL_FOLDERLIST() END SUBROUTINE MSPINSPECTOR_TAB1_FIELDS !###====================================================================== SUBROUTINE MSPINSPECTOR_TAB2_FIELDS() !###====================================================================== IMPLICIT NONE END SUBROUTINE MSPINSPECTOR_TAB2_FIELDS !###====================================================================== SUBROUTINE MSPINSPECTOR_TAB3_FIELDS() !###====================================================================== IMPLICIT NONE CALL MSPINSPECTOR_TAB3_GETPARAMLIST() END SUBROUTINE MSPINSPECTOR_TAB3_FIELDS !###====================================================================== SUBROUTINE MSPINSPECTOR_TAB4_FIELDS() !###====================================================================== IMPLICIT NONE END SUBROUTINE MSPINSPECTOR_TAB4_FIELDS !###====================================================================== SUBROUTINE MSPINSPECTOR_TAB5_FIELDS() !###====================================================================== IMPLICIT NONE ! INTEGER,DIMENSION(8) :: ID ! DATA ID/IDF_LABEL1,IDF_LABEL2,IDF_MENU5,IDF_MENU6,IDF_INTEGER1,IDF_INTEGER2,IDF_INTEGER11,IDF_INTEGER12/ CALL WDIALOGSELECT(ID_DMSPANALYSER_TAB5) !## get from date CALL UTL_FILLDATES(IDF_INTEGER2, IDF_MENU5,IDF_INTEGER1,MSPSDATE); MSPSDATE=UTL_JDATETOIDATE(MSPSDATE) !## get to date CALL UTL_FILLDATES(IDF_INTEGER12,IDF_MENU6,IDF_INTEGER11,MSPEDATE); MSPEDATE=UTL_JDATETOIDATE(MSPEDATE) END SUBROUTINE MSPINSPECTOR_TAB5_FIELDS !###====================================================================== SUBROUTINE MSPINSPECTOR_INIT() !###====================================================================== IMPLICIT NONE INTEGER :: IROW,ICOL CALL WINDOWSELECT(0) IF(WMENUGETSTATE(ID_MSPANALYSER,2).EQ.1)THEN CALL MSPINSPECTOR_CLOSE(); RETURN ENDIF CALL MAIN_UTL_INACTMODULE(ID_MSPANALYSER) !## other module not closed, no approvement given to start this functionality IF(IDIAGERROR.EQ.1)RETURN CALL WMENUSETSTATE(ID_MSPANALYSER,2,1) CALL WDIALOGLOAD(ID_DMSPANALYSER,ID_DMSPANALYSER) !## fill front tab CALL WDIALOGSELECT(ID_DMSPANALYSER_TAB1) CALL WDIALOGPUTIMAGE(ID_SELECT,ID_ICONOPEN) ; CALL WDIALOGTOOLTIP(ID_SELECT,'Open non-default MODEL location') CALL WDIALOGPUTIMAGE(ID_ZOOMFULL,ID_ICONZOOMFULL); CALL WDIALOGTOOLTIP(ID_ZOOMFULL,'Zoom to modelwindow') CALL WDIALOGFIELDOPTIONS(IDF_STRING1,EDITFIELDCHANGED,ENABLED) CALL MSPINSPECTOR_TAB1_FIELDS() !## initial outgrey tabs CALL WDIALOGSELECT(ID_DMSPANALYSER) CALL WDIALOGFIELDSTATE(IDOK,0) ; CALL WDIALOGTOOLTIP(IDOK,'Start hoovering to inspect parameter values') CALL WDIALOGTABSTATE(IDF_TAB1,ID_DMSPANALYSER_TAB2,0) CALL WDIALOGTABSTATE(IDF_TAB1,ID_DMSPANALYSER_TAB3,0) CALL WDIALOGTABSTATE(IDF_TAB1,ID_DMSPANALYSER_TAB4,0) CALL WDIALOGTABSTATE(IDF_TAB1,ID_DMSPANALYSER_TAB5,0) !## fill tab 2 CALL WDIALOGSELECT(ID_DMSPANALYSER_TAB2) DO IROW=1,4 ; DO ICOL=2,7 ; CALL WGRIDSTATECELL(IDF_GRID1,ICOL,IROW,DIALOGREADONLY) ; ENDDO ; ENDDO DO IROW=1,2 ; DO ICOL=2,3 ; CALL WGRIDSTATECELL(IDF_GRID2,ICOL,IROW,DIALOGREADONLY) ; ENDDO ; ENDDO DO IROW=1,2 ; DO ICOL=2,3 ; CALL WGRIDSTATECELL(IDF_GRID3,ICOL,IROW,DIALOGREADONLY) ; ENDDO ; ENDDO DO IROW=1,2 ; DO ICOL=2,3 ; CALL WGRIDSTATECELL(IDF_GRID4,ICOL,IROW,DIALOGREADONLY) ; ENDDO ; ENDDO DO IROW=1,2 ; DO ICOL=2,3 ; CALL WGRIDSTATECELL(IDF_GRID5,ICOL,IROW,DIALOGREADONLY) ; ENDDO ; ENDDO !## fill tab 3 CALL WDIALOGSELECT(ID_DMSPANALYSER_TAB3) ! DO IROW=1,4 ; DO ICOL=2,2 ; CALL WGRIDSTATECELL(IDF_GRID1,ICOL,IROW,DIALOGREADONLY) ; ENDDO ; ENDDO !## fill tab 4 CALL WDIALOGSELECT(ID_DMSPANALYSER_TAB4) CALL WDIALOGPUTIMAGE(IDF_PICTURE1,ID_ICONIRRIGATION1,1) CALL WDIALOGPUTIMAGE(IDF_PICTURE2,ID_ICONIRRIGATION2,1) CALL WDIALOGPUTIMAGE(IDF_PICTURE3,ID_ICONIRRIGATION3,1) !## fill tab 5 CALL WDIALOGSELECT(ID_DMSPANALYSER_TAB5) CALL WDIALOGPUTIMAGE(ID_OPEN,ID_ICONOPEN,1) ; CALL WDIALOGTOOLTIP(ID_OPEN,'Save selected parameterset to file') CALL WDIALOGPUTIMAGE(ID_SAVE,ID_ICONSAVEAS,1) ; CALL WDIALOGTOOLTIP(ID_SAVE,'Load selected parameterset from file') CALL WDIALOGPUTMENU(IDF_MENU1,MSFILES,SIZE(MSFILES),1) CALL WDIALOGSELECT(ID_DMSPANALYSER); CALL UTL_DIALOGSHOW(-1,-1,0,2) END SUBROUTINE MSPINSPECTOR_INIT END MODULE MOD_MSPINSPECTOR