!! 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_SCENTOOL_OBS USE WINTERACTER USE RESOURCE USE MOD_DBL USE MODPLOT, ONLY : MPW USE MOD_SCENTOOL_PAR USE MOD_SCENTOOL_UTL USE MOD_UTL, ONLY : UTL_HIDESHOWDIALOG,JDATETOGDATE,ITOS,RTOS,GDATETOJDATE,UTL_GETUNIT,UTL_JDATETOIDATE, & UTL_CREATEDIR,UTL_WSELECTFILE,UTL_IDATETOJDATE,UTL_IDATETOJDATE USE MOD_IDF, ONLY : IDFIROWICOL,IDFGETVAL,IDFREAD USE MOD_OSD, ONLY : OSD_OPEN CHARACTER(LEN=10),PRIVATE :: CDATE INTEGER,PRIVATE :: IMODE CONTAINS !###====================================================================== SUBROUTINE STOBS1INIT(IOPT) !###====================================================================== IMPLICIT NONE INTEGER,INTENT(IN) :: IOPT IMODE=IOPT IF(IOPT.EQ.ID_ADD)THEN IF(NOBS.EQ.MAXNOBS)THEN CALL WMESSAGEBOX(OKONLY,EXCLAMATIONICON,COMMONOK,'You cannot add another OBS SYSTEM in the current configuration.'//CHAR(13)// & 'Currently the maximum OBS SYSTEMS is '//TRIM(ITOS(MAXNOBS))//'.'//CHAR(13)// & 'Increase/add the keyword MAXNOBS= in the PUMPING TOOL file to increase the number of OBS SYSTEMS allowed','Information') IMODE=0 CALL STOBS1CLOSE() IMODE=IOPT RETURN ENDIF NOBS =NOBS+1 IOBS =NOBS OBS(IOBS)%CNAME='Observation '//TRIM(ITOS(IOBS)) OBS(IOBS)%NLOC =0 OBS(IOBS)%NZ =0 OBS(IOBS)%ILOCT=1 OBS(IOBS)%ICLR =WRGB(255,0,0) OBS(IOBS)%ISYMBOL=7 ALLOCATE(OBS(IOBS)%Z(NROWQ)) ALLOCATE(OBS(IOBS)%LOC(NROWL)) ELSE CALL WDIALOGSELECT(ID_DSCENTOOLTAB3) CALL WDIALOGGETMENU(IDF_MENU1,IOBS) ENDIF CALL UTL_HIDESHOWDIALOG(ID_DSCENTOOL,0) CALL WINDOWSELECT(0) CALL WMENUSETSTATE(ID_SCENTOOL,1,0) CALL WDIALOGSELECT(ID_DSCENTOOL_PROPTAB1) CALL WDIALOGTITLE('Observation') CALL WDIALOGPUTSTRING(IDF_LABEL1,'Observation name:') CALL WDIALOGPUTRADIOBUTTON(IDF_RADIO2) !## start enter durations !## put grid columnlabels CALL WGRIDLABELCOLUMN(IDF_GRID1,1,'Date') CALL WGRIDLABELCOLUMN(IDF_GRID1,2,'Duration') CALL WGRIDLABELCOLUMN(IDF_GRID1,3,'Measure (m)') !## turn off irrelevant options CALL WDIALOGSELECT(ID_DSCENTOOL_PROPTAB2) CALL WDIALOGFIELDSTATE(IDF_GROUP2,3) CALL WDIALOGFIELDSTATE(IDF_RADIO3,3) CALL WDIALOGFIELDSTATE(IDF_RADIO4,3) CALL STOBS1PUTFIELDS() CALL ST1_PROPUPDATEGRID(2) CALL ST1_PROPFIELDS() !## initialize date in grid CALL WDIALOGSELECT(ID_DSCENTOOL_PROPTAB1) IF(OBS(IOBS)%NZ.EQ.0)THEN CALL WDIALOGGETSTRING(IDF_STRING2,CDATE) CALL WGRIDPUTCELLSTRING(IDF_GRID1,1,1,CDATE) ENDIF CALL WDIALOGSELECT(ID_DSCENTOOL_PROP) CALL WDIALOGSETTAB(IDF_TAB,ID_DSCENTOOL_PROPTAB1) CALL WDIALOGTITLE('Observation Wells') CALL UTL_DIALOGSHOW(-1,-1,0,2) END SUBROUTINE STOBS1INIT !###====================================================================== SUBROUTINE STOBS1MAIN(ITYPE,MESSAGE) !###====================================================================== IMPLICIT NONE INTEGER,INTENT(IN) :: ITYPE TYPE(WIN_MESSAGE),INTENT(IN) :: MESSAGE CALL WDIALOGSELECT(ID_DSCENTOOL_PROP) SELECT CASE (MESSAGE%WIN) !## main dialog CASE (ID_DSCENTOOL_PROP) SELECT CASE (ITYPE) CASE (PUSHBUTTON) SELECT CASE (MESSAGE%VALUE1) !## quit OBSl editing CASE (IDCANCEL) CALL STOBS1CLOSE() END SELECT CASE (TABCHANGED) SELECT CASE (MESSAGE%VALUE2) CASE (ID_DSCENTOOL_PROPTAB3) CALL ST_SYMBOLDRAW(ID_DSCENTOOL_PROPTAB3,IDF_PICTURE1,IDF_MENU1,IDF_INTEGER1) END SELECT END SELECT !## OBSl strengths CASE (ID_DSCENTOOL_PROPTAB1) SELECT CASE (ITYPE) CASE (FIELDCHANGED) CALL ST1_PROPFIELDS() CASE (PUSHBUTTON) SELECT CASE (MESSAGE%VALUE1) CASE (ID_OPEN,ID_SAVEAS) CALL ST1_PROPOPENSAVE(MESSAGE%VALUE1,ID_DSCENTOOL_PROPTAB1,2) CASE (ID_GRAPH) CALL ST1_PROPGRAPH(2) CASE (ID_CALC) CALL ST1_PROPUPDATEGRID(2) END SELECT END SELECT !## OBSl locations CASE (ID_DSCENTOOL_PROPTAB2) SELECT CASE (ITYPE) CASE (FIELDCHANGED) ! CALL STOBS1FIELDS() CASE (PUSHBUTTON) SELECT CASE (MESSAGE%VALUE1) CASE (ID_OPEN,ID_SAVEAS) CALL ST1_PROPOPENSAVE(MESSAGE%VALUE1,ID_DSCENTOOL_PROPTAB2,2) CASE (ID_MOVE,ID_DRAW,ID_DELETE) CALL WDIALOGSELECT(ID_DSCENTOOL_PROPTAB2) CALL WDIALOGFIELDSTATE(ID_OPEN,2) CALL WDIALOGFIELDSTATE(ID_SAVEAS,2) IF(MESSAGE%VALUE1.EQ.ID_MOVE)THEN CALL WDIALOGFIELDSTATE(ID_DRAW,2) CALL WDIALOGFIELDSTATE(ID_DELETE,2) CALL ST_DRAWPNTS(ID_DSCENTOOL_PROPTAB2,IDF_GRID1,(/4,5/),2,OBS(IOBS)%ISYMBOL,OBS(IOBS)%ICLR,2) !## move ELSEIF(MESSAGE%VALUE1.EQ.ID_DELETE)THEN CALL WDIALOGFIELDSTATE(ID_DRAW,2) CALL WDIALOGFIELDSTATE(ID_MOVE,2) CALL ST_DRAWPNTS(ID_DSCENTOOL_PROPTAB2,IDF_GRID1,(/4,5/),3,OBS(IOBS)%ISYMBOL,OBS(IOBS)%ICLR,2) !## delete ELSE CALL WDIALOGFIELDSTATE(ID_MOVE,2) CALL WDIALOGFIELDSTATE(ID_DELETE,2) CALL ST_DRAWPNTS(ID_DSCENTOOL_PROPTAB2,IDF_GRID1,(/4,5/),1,OBS(IOBS)%ISYMBOL,OBS(IOBS)%ICLR,2) !## add ENDIF CALL WDIALOGSELECT(ID_DSCENTOOL_PROPTAB2) CALL WDIALOGFIELDSTATE(ID_OPEN,1) CALL WDIALOGFIELDSTATE(ID_SAVEAS,1) CALL WDIALOGFIELDSTATE(ID_MOVE,1) CALL WDIALOGFIELDSTATE(ID_DRAW,1) CALL WDIALOGFIELDSTATE(ID_DELETE,1) END SELECT END SELECT !## OBSl display options CASE (ID_DSCENTOOL_PROPTAB3) SELECT CASE (ITYPE) CASE (RESIZE,EXPOSE) CALL ST_SYMBOLDRAW(ID_DSCENTOOL_PROPTAB3,IDF_PICTURE1,IDF_MENU1,IDF_INTEGER1) CASE (FIELDCHANGED) SELECT CASE (MESSAGE%VALUE2) CASE (IDF_MENU1,IDF_REAL1) CALL ST_SYMBOLDRAW(ID_DSCENTOOL_PROPTAB3,IDF_PICTURE1,IDF_MENU1,IDF_INTEGER1) END SELECT !IDD,IDF,IDM,IDC,IDS) CASE(PUSHBUTTON) SELECT CASE (MESSAGE%VALUE1) CASE (ID_COLOUR) CALL ST1_GETCOLOUR(ID_DSCENTOOL_PROPTAB3,IDF_INTEGER1) CALL ST_SYMBOLDRAW(ID_DSCENTOOL_PROPTAB3,IDF_PICTURE1,IDF_MENU1,IDF_INTEGER1) ! CALL WDIALOGSELECT(ID_DSCENTOOL_PROPTAB3) ! CALL WDIALOGGETINTEGER(IDF_INTEGER1,IRGB) ! CALL WSELECTCOLOUR(IRGB) ! IF(WINFODIALOG(4).EQ.1)THEN ! CALL WDIALOGPUTINTEGER(IDF_INTEGER1,IRGB) ! CALL ST_SYMBOLDRAW(ID_DSCENTOOL_PROPTAB3,IDF_PICTURE1,IDF_MENU1,IDF_INTEGER1) ! ENDIF END SELECT END SELECT END SELECT END SUBROUTINE STOBS1MAIN !###====================================================================== SUBROUTINE STOBS1CLOSE() !###====================================================================== IMPLICIT NONE IF(IMODE.NE.0)THEN CALL WMESSAGEBOX(YESNOCANCEL,QUESTIONICON,COMMONNO,'Do you want to save any adjustments ?','Question') !## save and quit IF(WINFODIALOG(4).EQ.1)THEN CALL ST1_PROPUPDATEGRID(2) IF(.NOT.STOBS1GETFIELDS())RETURN !## get data from grid, if not correct, return - not closing! !## no save and quit ELSEIF(WINFODIALOG(4).EQ.2)THEN IF(IMODE.EQ.ID_ADD)THEN IOBS=IOBS-1 NOBS=NOBS-1 ENDIF ENDIF !## not canceling IF(WINFODIALOG(4).EQ.0)RETURN ENDIF CALL WDIALOGSELECT(ID_DSCENTOOL_PROP) CALL WDIALOGHIDE() CALL STOBS1TITLE() IOBS=0 CALL UTL_HIDESHOWDIALOG(ID_DSCENTOOL,2) CALL WMENUSETSTATE(ID_SCENTOOL,1,1) CALL ST1FIELDS() ! CALL IDFPLOT(1) END SUBROUTINE STOBS1CLOSE !###====================================================================== SUBROUTINE STOBS1TITLE() !###====================================================================== IMPLICIT NONE CALL WDIALOGSELECT(ID_DSCENTOOLTAB3) CALL WDIALOGTITLE('Observation Wells ('//TRIM(ITOS(NOBS))//')') IF(IOBS.NE.0)THEN CALL WDIALOGPUTMENU(IDF_MENU1,OBS%CNAME,NOBS,IOBS) ELSE CALL WDIALOGCLEARFIELD(IDF_MENU1) ENDIF END SUBROUTINE STOBS1TITLE !###====================================================================== SUBROUTINE ST1SAVELOADOBS(IU,ICODE,FNAME) !###====================================================================== IMPLICIT NONE INTEGER,INTENT(IN) :: IU,ICODE CHARACTER(LEN=*),INTENT(IN) :: FNAME CHARACTER(LEN=256) :: LINE,DIR INTEGER :: I,J,K,IOS,IDATE,JU IF(ABS(ICODE).EQ.ID_SAVEAS.OR.ABS(ICODE).EQ.ID_SAVE)THEN IF(ICODE.GT.0)THEN LINE=TRIM(ITOS(NOBS)) WRITE(IU,'(A)') TRIM(LINE) !//' !## nobs[i]' DO I=1,NOBS WRITE(IU,'(A)') '"'//TRIM(OBS(I)%CNAME)//'"' ! !## name of observation system[c]' LINE=TRIM(ITOS(OBS(I)%NZ)) WRITE(IU,'(A)') TRIM(LINE) !//' !## nmeasures[i]' DO J=1,OBS(I)%NZ LINE=TRIM(ITOS(UTL_JDATETOIDATE(OBS(I)%Z(J)%IDATE)))//','//TRIM(RTOS(OBS(I)%Z(J)%MEASURE,'F',3)) !## m3/day -> m3/hr WRITE(IU,'(A)') TRIM(LINE) !//' !## date[yyyymmdd],measure[r]' END DO LINE=TRIM(ITOS(OBS(I)%NLOC))//','//TRIM(ITOS(OBS(I)%ILOCT))//','// & TRIM(ITOS(OBS(I)%ISYMBOL))//','//TRIM(ITOS(OBS(I)%ICLR)) !## number of locations, iloct:1=msl 2=surface WRITE(IU,'(A)') TRIM(LINE) !//' !## nloc[i],ltype[i],isymbol[i],iclr[i]' DO J=1,OBS(I)%NLOC LINE='"'//TRIM(OBS(I)%LOC(J)%ID)//'",'//TRIM(RTOS(OBS(I)%LOC(J)%Z1,'F',3))//','// & TRIM(RTOS(OBS(I)%LOC(J)%Z2,'F',3))//','// & TRIM(RTOS(OBS(I)%LOC(J)%X ,'F',3))//','// & TRIM(RTOS(OBS(I)%LOC(J)%Y ,'F',3)) WRITE(IU,'(A)') TRIM(LINE) !//' !## id[c],z1[r],z2[r],x[r],y[r]' END DO END DO ELSE DIR=FNAME(:INDEX(FNAME,'\',.TRUE.)-1) K=0; DO I=1,NOBS; DO J=1,OBS(I)%NLOC; K=K+1; ENDDO; ENDDO WRITE(IU,'(A)') TRIM(ITOS(K)) WRITE(IU,'(A)') '6' WRITE(IU,'(A)') 'X' WRITE(IU,'(A)') 'Y' WRITE(IU,'(A)') 'ID' WRITE(IU,'(A)') 'Z1' WRITE(IU,'(A)') 'Z2' WRITE(IU,'(A)') 'NAME' WRITE(IU,'(A)') '3,TXT' DO I=1,NOBS DO J=1,OBS(I)%NLOC WRITE(IU,'(A)') TRIM(RTOS(OBS(I)%LOC(J)%X,'F',3))//','//TRIM(RTOS(OBS(I)%LOC(J)%Y,'F',3))// & ',"'//TRIM(OBS(I)%LOC(J)%ID)//'",'//TRIM(RTOS(OBS(I)%LOC(J)%Z1,'F',3))//','//TRIM(RTOS(OBS(I)%LOC(J)%Z2,'F',3))// & ',"'//TRIM(OBS(I)%CNAME)//'"' JU=UTL_GETUNIT() OPEN(JU,FILE=TRIM(DIR)//'\'//TRIM(OBS(I)%LOC(J)%ID)//'.TXT',STATUS='UNKNOWN',ACTION='WRITE') WRITE(JU,'(A)') TRIM(ITOS(OBS(I)%NZ)) WRITE(JU,'(A)') '2,1' WRITE(JU,'(A)') 'DATE,-999.99' WRITE(JU,'(A)') 'MEASURE,-999.99' DO K=1,OBS(I)%NZ LINE=TRIM(ITOS(UTL_JDATETOIDATE(OBS(I)%Z(K)%IDATE)))//','//TRIM(RTOS(OBS(I)%Z(K)%MEASURE,'F',3)) WRITE(JU,'(A)') TRIM(LINE) !//' !## delt[i],qrate[r]' ENDDO CLOSE(JU) END DO ENDDO CALL WMESSAGEBOX(OKONLY,INFORMATIONICON,COMMONOK,'Succesfully save '//TRIM(FNAME),'Information') ENDIF ELSEIF(ICODE.EQ.ID_OPEN)THEN READ(IU,*,IOSTAT=IOS) NOBS IF(IOS.NE.0)NOBS=0 IF(MAXNOBS.LT.NOBS)THEN CALL WMESSAGEBOX(OKONLY,QUESTIONICON,COMMONYES,'Maximal number of observation is currently '//TRIM(ITOS(MAXNOBS))//CHAR(13)// & 'Do you want to set the maximal to '//TRIM(ITOS(NOBS))//' and continue ?'//CHAR(13)// & 'If not, iMOD will discard further reading of the observations','Question') IF(WINFODIALOG(4).EQ.1)THEN MAXNOBS=NOBS CALL PT_UTL_ALLOCATEOBS() NOBS=MAXNOBS ELSE NOBS=0 ENDIF ENDIF DO I=1,NOBS READ(IU,*) OBS(I)%CNAME READ(IU,*) OBS(I)%NZ OBS(I)%ITYPE=1 !## not used IF(.NOT.ASSOCIATED(OBS(I)%Z)) ALLOCATE(OBS(I)%Z(NROWQ)) DO J=1,OBS(I)%NZ OBS(I)%Z(J)%MEASURE=0.0D0 READ(IU,*) IDATE,OBS(I)%Z(J)%MEASURE OBS(I)%Z(J)%IDATE=UTL_IDATETOJDATE(IDATE) END DO READ(IU,*) OBS(I)%NLOC,OBS(I)%ILOCT,OBS(I)%ISYMBOL,OBS(I)%ICLR IF(.NOT.ASSOCIATED(OBS(I)%LOC))ALLOCATE(OBS(I)%LOC(NROWL)) DO J=1,OBS(I)%NLOC READ(IU,*) OBS(I)%LOC(J)%ID,OBS(I)%LOC(J)%Z1,OBS(I)%LOC(J)%Z2,OBS(I)%LOC(J)%X,OBS(I)%LOC(J)%Y ENDDO END DO ENDIF END SUBROUTINE ST1SAVELOADOBS !###====================================================================== SUBROUTINE ST1SIMBOXOBS(XMIN,YMIN,XMAX,YMAX) !###====================================================================== IMPLICIT NONE REAL(KIND=DP_KIND),INTENT(INOUT) :: XMIN,YMIN,XMAX,YMAX INTEGER :: I,J DO I=1,NOBS DO J=1,OBS(I)%NLOC XMIN=MIN(XMIN,OBS(I)%LOC(J)%X) XMAX=MAX(XMAX,OBS(I)%LOC(J)%X) YMIN=MIN(YMIN,OBS(I)%LOC(J)%Y) YMAX=MAX(YMAX,OBS(I)%LOC(J)%Y) END DO END DO END SUBROUTINE ST1SIMBOXOBS !###====================================================================== SUBROUTINE STOBS1DELETE() !###====================================================================== IMPLICIT NONE CALL WDIALOGSELECT(ID_DSCENTOOLTAB3) CALL WDIALOGGETMENU(IDF_MENU1,IOBS) CALL WMESSAGEBOX(YESNO,QUESTIONICON,COMMONNO,'Are you sure to delete the definition for:'//CHAR(13)// & TRIM(OBS(IOBS)%CNAME)//' ?','Question') IF(WINFODIALOG(4).NE.1)RETURN END SUBROUTINE STOBS1DELETE !###====================================================================== SUBROUTINE STOBS1PUTFIELDS() !###====================================================================== IMPLICIT NONE INTEGER :: I,J,IY,IM,ID !## clear fields CALL WDIALOGSELECT(ID_DSCENTOOL_PROPTAB1) DO I=1,NROWQ DO J=1,4; CALL WGRIDCLEARCELL(IDF_GRID1,J,I); END DO END DO CALL WDIALOGSELECT(ID_DSCENTOOL_PROPTAB2) DO I=1,NROWL DO J=1,5; CALL WGRIDCLEARCELL(IDF_GRID1,J,I); END DO ENDDO CALL WDIALOGSELECT(ID_DSCENTOOL_PROPTAB1) CALL WDIALOGPUTSTRING(IDF_STRING1,OBS(IOBS)%CNAME) IF(OBS(IOBS)%NZ.GT.0)THEN CALL WDIALOGPUTSTRING(IDF_STRING2,JDATETOGDATE(OBS(IOBS)%Z(1)%IDATE)) ELSE CALL IOSDATE(IY,IM,ID) CALL WDIALOGPUTSTRING(IDF_STRING2,TRIM(ITOS(ID))//'/'//TRIM(ITOS(IM))//'/'//TRIM(ITOS(IY))) ENDIF DO I=1,OBS(IOBS)%NZ CALL WGRIDPUTCELLSTRING(IDF_GRID1,1,I,JDATETOGDATE(OBS(IOBS)%Z(I)%IDATE)) CALL WGRIDPUTCELLDOUBLE(IDF_GRID1,3,I,OBS(IOBS)%Z(I)%MEASURE) CALL WGRIDPUTCELLINTEGER(IDF_GRID1,4,I,OBS(IOBS)%Z(I)%IDATE) END DO CALL WGRIDSETCELL(IDF_GRID1,1,1) CALL WDIALOGSELECT(ID_DSCENTOOL_PROPTAB2) DO I=1,OBS(IOBS)%NLOC CALL WGRIDPUTCELLSTRING(IDF_GRID1,1,I,OBS(IOBS)%LOC(I)%ID) CALL WGRIDPUTCELLDOUBLE(IDF_GRID1,2,I,OBS(IOBS)%LOC(I)%Z1) CALL WGRIDPUTCELLDOUBLE(IDF_GRID1,3,I,OBS(IOBS)%LOC(I)%Z2) CALL WGRIDPUTCELLDOUBLE(IDF_GRID1,4,I,OBS(IOBS)%LOC(I)%X) CALL WGRIDPUTCELLDOUBLE(IDF_GRID1,5,I,OBS(IOBS)%LOC(I)%Y) END DO CALL WGRIDSETCELL(IDF_GRID1,1,1)!,IPOS) IF(OBS(IOBS)%ILOCT.EQ.1)CALL WDIALOGPUTRADIOBUTTON(IDF_RADIO1) IF(OBS(IOBS)%ILOCT.EQ.2)CALL WDIALOGPUTRADIOBUTTON(IDF_RADIO2) IF(OBS(IOBS)%ITYPE.EQ.1)CALL WDIALOGPUTRADIOBUTTON(IDF_RADIO3) IF(OBS(IOBS)%ITYPE.EQ.2)CALL WDIALOGPUTRADIOBUTTON(IDF_RADIO4) CALL WDIALOGSELECT(ID_DSCENTOOL_PROPTAB3) CALL WDIALOGPUTOPTION(IDF_MENU1,OBS(IOBS)%ISYMBOL) CALL WDIALOGPUTINTEGER(IDF_INTEGER1,OBS(IOBS)%ICLR) END SUBROUTINE STOBS1PUTFIELDS !###====================================================================== LOGICAL FUNCTION STOBS1GETFIELDS() !###====================================================================== IMPLICIT NONE INTEGER :: I STOBS1GETFIELDS=.FALSE. CALL WDIALOGSELECT(ID_DSCENTOOL_PROPTAB1) CALL WDIALOGGETSTRING(IDF_STRING1,OBS(IOBS)%CNAME) IF(LEN_TRIM(OBS(IOBS)%CNAME).EQ.0)THEN CALL WMESSAGEBOX(OKONLY,EXCLAMATIONICON,COMMONOK,'You should specify a name for the OBS-system at least','Warning') RETURN ENDIF CALL WDIALOGUNDEFINED(DVALUE=NODATAGRID) OBS(IOBS)%NZ=0 DO I=1,NROWQ IF(WINFOGRIDCELL(IDF_GRID1,1,I,GRIDCELLDEFINED).EQ.0)EXIT CALL WGRIDGETCELLSTRING(IDF_GRID1,1,I,CDATE) !## empty IF(LEN_TRIM(CDATE).EQ.0)EXIT OBS(IOBS)%Z(I)%IDATE=GDATETOJDATE(CDATE) !## date conversion went wrong IF(OBS(IOBS)%Z(I)%IDATE.EQ.0)EXIT IF(WINFOGRIDCELL(IDF_GRID1,3,I,GRIDCELLDEFINED).EQ.1)THEN CALL WGRIDGETCELLDOUBLE(IDF_GRID1,3,I,OBS(IOBS)%Z(I)%MEASURE) ELSE OBS(IOBS)%Z(I)%MEASURE=NODATAGRID ENDIF OBS(IOBS)%NZ=OBS(IOBS)%NZ+1 END DO CALL WDIALOGSELECT(ID_DSCENTOOL_PROPTAB2) OBS(IOBS)%NLOC=0 DO I=1,NROWL OBS(IOBS)%LOC(I)%ID='' IF(WINFOGRIDCELL(IDF_GRID1,1,I,GRIDCELLDEFINED).EQ.1)CALL WGRIDGETCELLSTRING(IDF_GRID1,1,I,OBS(IOBS)%LOC(I)%ID) OBS(IOBS)%LOC(I)%Z1=NODATAGRID IF(WINFOGRIDCELL(IDF_GRID1,2,I,GRIDCELLDEFINED).EQ.1)CALL WGRIDGETCELLDOUBLE(IDF_GRID1,2,I,OBS(IOBS)%LOC(I)%Z1) OBS(IOBS)%LOC(I)%Z2=NODATAGRID IF(WINFOGRIDCELL(IDF_GRID1,3,I,GRIDCELLDEFINED).EQ.1)CALL WGRIDGETCELLDOUBLE(IDF_GRID1,3,I,OBS(IOBS)%LOC(I)%Z2) IF(OBS(IOBS)%LOC(I)%Z1.LT.OBS(IOBS)%LOC(I)%Z2)THEN CALL WMESSAGEBOX(OKONLY,EXCLAMATIONICON,COMMONOK,'You should specify top filter to be above the bottom filter'//CHAR(13)// & 'Check Observation number '//TRIM(ITOS(I)),'Warning') RETURN ENDIF IF(WINFOGRIDCELL(IDF_GRID1,4,I,GRIDCELLDEFINED).EQ.0)EXIT CALL WGRIDGETCELLDOUBLE(IDF_GRID1,4,I,OBS(IOBS)%LOC(I)%X) IF(OBS(IOBS)%LOC(I)%X.EQ.NODATAGRID)EXIT IF(WINFOGRIDCELL(IDF_GRID1,5,I,GRIDCELLDEFINED).EQ.0)EXIT CALL WGRIDGETCELLDOUBLE(IDF_GRID1,5,I,OBS(IOBS)%LOC(I)%Y) IF(OBS(IOBS)%LOC(I)%Y.EQ.NODATAGRID)EXIT OBS(IOBS)%NLOC=OBS(IOBS)%NLOC+1 END DO CALL WDIALOGGETRADIOBUTTON(IDF_RADIO1,OBS(IOBS)%ILOCT) CALL WDIALOGGETRADIOBUTTON(IDF_RADIO3,OBS(IOBS)%ITYPE) CALL WDIALOGSELECT(ID_DSCENTOOL_PROPTAB3) CALL WDIALOGGETMENU(IDF_MENU1,OBS(IOBS)%ISYMBOL) CALL WDIALOGGETINTEGER(IDF_INTEGER1,OBS(IOBS)%ICLR) STOBS1GETFIELDS=.TRUE. END FUNCTION STOBS1GETFIELDS END MODULE MOD_SCENTOOL_OBS