!----- AGPL -------------------------------------------------------------------- ! ! Copyright (C) Stichting Deltares, 2015. ! ! This file is part of Delft3D (D-Flow Flexible Mesh component). ! ! Delft3D is free software: you can redistribute it and/or modify ! it under the terms of the GNU Affero General Public License as ! published by the Free Software Foundation version 3. ! ! Delft3D 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 Affero General Public License for more details. ! ! You should have received a copy of the GNU Affero General Public License ! along with Delft3D. If not, see . ! ! contact: delft3d.support@deltares.nl ! Stichting Deltares ! P.O. Box 177 ! 2600 MH Delft, The Netherlands ! ! All indications and logos of, and references to, "Delft3D", ! "D-Flow Flexible Mesh" and "Deltares" are registered trademarks of Stichting ! Deltares, and remain the property of Stichting Deltares. All rights reserved. ! !------------------------------------------------------------------------------- ! $Id: gui.F90 43424 2015-12-04 17:30:45Z kernkam $ ! $HeadURL: https://repos.deltares.nl/repos/ds/trunk/additional/unstruc/src/gui.F90 $ ! Copyright notice: ! Several of the graphical user interface routines below make use of the INTERACTER libraries ! (only when run on Windows platforms with display mode on). ! Copyright on the INTERACTER libraries resides with Interactive Software Services Ltd. ! More information: http://www.winteracter.com/iss !---------------------------------------------------------------------- ! subroutines from net.F90 !---------------------------------------------------------------------- SUBROUTINE CHOICES(MODE,NUM,NWHAT,KEY) use m_netw use m_samples use m_grid USE M_MISSING use unstruc_display use m_polygon use m_partitioninfo use m_interpolationsettings implicit none integer :: ja, L, n12, ikey, mnx integer :: ndraw integer :: MODE,NUM,NWHAT,KEY,nwhat2 integer :: JDEMO integer :: irerun ! orthogonalisenet: rerun COMMON /DRAWTHIS/ NDRAW(40) COMMON /DEMO/ JDEMO integer :: maxexp integer :: maxopt, ierr integer, parameter :: MAXOP = 50 CHARACTER*40 OPTION(MAXOP),EXP(MAXOP) integer, external :: flow_modelinit if ( netstat.ne.NETSTAT_OK ) call setnodadm(0) IF (NUM .EQ. 1) THEN ! load en save files CALL NFILES(MODE, NUM, NWHAT, KEY) ELSE IF (NUM .EQ. 2) THEN ! operations ! if ( jins.ne.1 ) then ! SPvdP: temporarily disabled ! jins = 1 ! netstat = NETSTAT_CELLS_DIRTY ! end if IF (NWHAT .EQ. 1) THEN CALL RESTORE() ELSE IF (NWHAT .EQ. 2) THEN CALL SAVE() CALL MAKENET() CALL MINMXNS() ELSE IF (NWHAT .EQ. 3) THEN CALL curvilinearGRIDfromsplines() ELSE IF (NWHAT .EQ. 4) THEN CALL curvilinearGRIDinpolygon() ELSE IF (NWHAT .EQ. 5) THEN call CREATESAMPLESINPOLYGON() ELSE IF (NWHAT .EQ. 6) THEN CALL SAVE() CALL Triangulatesamplestonetwork(1) netstat = NETSTAT_CELLS_DIRTY ELSE IF (NWHAT .EQ. 7) THEN CALL SAVE() call gridtonet() call delgrd(key,0,0) ! no save, no delpol ELSE IF (NWHAT .EQ. 8) THEN CALL SAVE() irerun = 1 do while ( irerun.ne.0 ) call ORTHOGONALISENET(irerun) end do ELSE IF (NWHAT .EQ. 9) THEN ELSE IF (NWHAT .EQ. 10) THEN ! call csmfinebnds2unstruc() call REFINEPOLYGON () ELSE IF (NWHAT .EQ. 11) THEN CALL SAVE() CALL REFINEQUADS() ELSE IF (NWHAT .EQ. 12) THEN ! CALL quadsTOTRI() CALL SAVE() CALL REFINEQUADS_casulli() ELSE IF (NWHAT .EQ. 13) THEN ! CALL RELINK() ! CALL SAVE() ! CALL REFINECELLSANDFACES() ! REFINECELLSONLY() CALL SAVE() CALL REFINECELLSANDFACES2() ! REFINECELLSONLY() ELSE IF (NWHAT .EQ. 14) THEN call save() call derefine_mesh(0d0, 0d0, .false.) ELSE IF (NWHAT .EQ. 15) THEN CALL SAVE() CALL connectcurvilinearquadsddtype() ELSE IF (NWHAT .EQ. 16) THEN !CALL TIELDB() CALL SAVE() CALL CUTCELLS(1) ELSE IF (NWHAT .EQ. 17) THEN CALL COPYTRANS() ELSE IF (NWHAT .EQ. 18) THEN CALL SAVE() call EXTERNALTRIANGLESTOOUTERQUADS() ELSE IF (NWHAT .EQ. 19) THEN ELSE IF (NWHAT .EQ. 20) THEN ierr = flow_modelinit() ELSE IF (NWHAT .EQ. 21) THEN ! Refresh net adm. (setnodadm + findcells) call findcells(100) ! include folded cells ! call findcells(0) ! do not include folded cells call makenetnodescoding() ! killcell relies on node codes ELSE IF (NWHAT .EQ. 22) THEN call interpdivers(2) ! Network zk flow bathy ELSE IF (NWHAT .EQ. 23) THEN call interpdivers(interpolate_to) ! interpolate to interpolate_to in samples if (interpolate_to == 5) then ! plotlin? ndraw(36) = 1 else if (interpolate_to == 1) then call setbobs() endif call setbobs() ELSE IF (NWHAT .EQ. 24) THEN call embed1Dchannels() ELSE IF (NWHAT .EQ. 25) THEN !call flow_initfloodfill() ELSE IF (NWHAT .EQ. 26) THEN ELSE IF (NWHAT .EQ. 27) THEN call flow_spatietimestep() ELSE IF (NWHAT .EQ. 28) THEN CALL SAVE() CALL MAKECOARSE2FINETRIANGLECONNECTIONCELLS() ELSE IF (NWHAT .EQ. 29) THEN CALL SAVE() CALL renumberNodes() ! call removewallfromsamples() ! obsolete ! CALL REFINELINES() ELSE IF (NWHAT .EQ. 30) THEN CALL SAVE() call fliplinks() ELSE IF (NWHAT .EQ. 31) THEN CALL SAVE() call coarsen_mesh() ELSE IF (NWHAT .EQ. 32) THEN call savegrd() ! delete grid mc = 0 nc = 0 ikey = 3 call drawnu(ikey) call spline2curvi() ELSE IF (NWHAT .EQ. 33) THEN call save() call triangulate_quadsandmore(ja) ELSE IF (NWHAT .EQ. 34 ) THEN call detect_ridges(1) ELSE IF (NWHAT .EQ. 35 ) THEN ! call sam2net_curvi() ELSE IF (NWHAT .EQ. 36) THEN ! intentionally left empty ELSE IF (NWHAT .EQ. 37 ) THEN call partition_to_idomain() ELSE IF (NWHAT .EQ. 38 ) THEN call make_dual_mesh() ELSE IF (NWHAT .EQ. 39) THEN call samdif() ENDIF KEY = 3 NUM = 0 CALL IMOUSECURSORSHAPE(1,'G') CALL IMouseCursorShow() ELSE IF (NUM .EQ. 3) THEN ! display opties CALL NDISPLAY(NWHAT,KEY) NUM = 0 ELSE IF (NUM .EQ. 4) THEN ! dit zijn de edit nummers ELSE IF (NUM .EQ. 5) THEN ! addsubdel IF (NWHAT .EQ. 1) THEN CALL DELPOL() ! edit/modify polygon: netcell administration out of date netstat = NETSTAT_CELLS_DIRTY ELSE IF (NWHAT .EQ. 2) THEN CALL DELNET(KEY,0, 1) ELSE IF (NWHAT .EQ. 3) THEN CALL DELNET(KEY,1, 1) ELSE IF (NWHAT .EQ. 4) THEN CALL deleteSelectedSplines() ELSE IF (NWHAT .EQ. 5) THEN call delsam(1) ELSE IF (NWHAT .EQ. 6) THEN CALL ZEROLAN( KEY) ELSE IF (NWHAT .EQ. 7) THEN CALL DELgrd(key,1,0) ELSE IF (NWHAT .EQ. 8) THEN CALL deleteSelectedObservations() ELSE IF (NWHAT .EQ. 9) THEN CALL REMOVESMALLLINKS() ELSE IF (NWHAT .EQ.10) THEN CALL MERGENODESINPOLYGON() ! netcell administration out of date netstat = NETSTAT_CELLS_DIRTY ELSE IF (NWHAT .EQ. 12) THEN CALL zerowaterdepth() ELSE IF (NWHAT .EQ. 13) THEN call plusabs_flow(1) ELSE IF (NWHAT .EQ. 14) THEN !**** ** call plusabs_flow(2) ELSE IF (NWHAT .EQ. 15) THEN !**** ** ! call plusabs_flow(3) mnx = mmax*nmax call PLUSABSD(XC,YC,ZC,mnx,KEY,zc) ELSE IF (NWHAT .EQ. 16) THEN !**** ** CALL PLUSABSD(XK,YK,ZK,NUMK,KEY,XK) ELSE IF (NWHAT .EQ.17) THEN !**** ** CALL PLUSABSD(XK,YK,ZK,NUMK,KEY,YK) ELSE IF (NWHAT .EQ.18) THEN !**** ** CALL PLUSABSD(XK,YK,ZK,NUMK,KEY,ZK) ELSE IF (NWHAT .EQ.19) THEN !**** ** CALL PLUSABSD(Xs,Ys,Zs,NS,KEY,Zs) ELSE IF (NWHAT .EQ.20) THEN !**** ** CALL PLUSABSD(Xpl,Ypl,Zpl,NPL,KEY,Zpl) ELSE IF (NWHAT .EQ.21) THEN !**** ** CALL PLUSABSI(XK,YK,ZK,KN,NUMK,NUML,KEY,kn3typ) ELSE IF (NWHAT .EQ.23) THEN EXP(1) = 'MENU ' EXP(2) = 'COPY ... TO POLYGON ' OPTION(1) = 'Copy land boundary to polygon ' OPTION(2) = 'Copy net bounds to polygon ' OPTION(3) = 'Copy cross sections to polygon ' OPTION(4) = 'Copy thin dams to polygon ' OPTION(5) = 'Copy fixed weirs to polygon ' OPTION(6) = 'Copy splines to polygon (fine) ' OPTION(7) = 'Copy splines to polygon ' OPTION(8) = 'Copy curvigrid bnds to polygon ' OPTION(9) = 'Copy 1D netw to polygon ' OPTION(10)= 'Copy whole netw to polygon ' OPTION(11)= 'Copy samples to polygon ' MAXOPT = 11 NWHAT2 = 0 CALL MENUV3(NWHAT2,OPTION,MAXOPT,EXP,MAXEXP) if (nwhat2 == 1) then CALL COPYLDBTOPOL() else if (nwhat2 == 2) then call copynetboundstopol(0,1) else if (nwhat2 == 3) then CALL copycrosssectionstopol() else if (nwhat2 == 4) then CALL copythindamstopol() else if (nwhat2 == 5) then CALL copyfixedweirstopol() else if (nwhat2 == 6) then CALL copysplinestofinepol(11) else if (nwhat2 == 7) then CALL copysplinestofinepol(1) else if (nwhat2 == 8) then CALL copycurvigridboundstopol() else if (nwhat2 == 9) then CALL regrid1D(0) ! 1D netw to pol else if (nwhat2 == 10) then CALL copynetwtopol() else if (nwhat2 == 11) then CALL copysamtopol() end if KEY = 3 ELSE IF (NWHAT .EQ.24) THEN EXP(1) = 'MENU ' EXP(2) = 'COPY POLYGON TO ... ' OPTION(1) = 'Copy polygon to land boundary ' OPTION(2) = 'Copy polygon to observation points ' OPTION(3) = 'Copy polygon to samples ' OPTION(4) = 'Copy polygon to spline ' MAXOPT = 4 NWHAT2 = 0 CALL MENUV3(NWHAT2,OPTION,MAXOPT,EXP,MAXEXP) if (nwhat2 == 1) then CALL COPYPOLTOLDB() else if (nwhat2 == 2) then call copyPolygonToObservations() else if (nwhat2 == 3) then CALL copyPolygonToSamples() else if (nwhat2 == 4) then CALL copyPolToSpline() end if KEY = 3 ELSE IF (NWHAT .EQ.25) THEN EXP(1) = 'MENU ' EXP(2) = 'COPY ... TO SAMPLES ' OPTION(1) = 'Copy polygon to samples ' OPTION(2) = 'Copy network cell sizes to samples ' OPTION(3) = 'Copy network nodes to samples ' OPTION(4) = 'Copy values on flow nodes to samples ' OPTION(5) = 'Swap samples and second samples ' OPTION(6) = 'Copy curvilinear grid to samples ' MAXOPT = 6 NWHAT2 = 0 CALL MENUV3(NWHAT2,OPTION,MAXOPT,EXP,MAXEXP) if (nwhat2 == 1) then call copypolygontosamples() else if (nwhat2 == 2) then call copyflowcellsizetosamples ! copyzktosam() else if (nwhat2 == 3) then call copynetnodestosam() else if (nwhat2 == 4) then CALL copywaterlevelstosamples() else if (nwhat2 == 5) then call swapsamples() else if (nwhat2 == 6) then call copygridtosam() end if KEY = 3 ELSE IF (NWHAT .EQ.26) THEN CALL copylandboundaryto1dnetwork() ELSE IF (NWHAT .EQ.27) THEN CALL copynetwtonetw() ELSE IF (NWHAT .EQ.28) THEN n12 = 1 call cutcell_list(n12, '*.POL',5) ELSE IF (NWHAT .EQ.29) THEN n12 = 3 call findcells(0) call cutcell_list(n12, '*.cut',5) ELSE IF (NWHAT .EQ.30) THEN ! intentionally left empty ELSE IF (NWHAT .EQ.31) THEN call merge_polylines() ELSE IF (NWHAT .EQ.32) THEN call delnetzkabovezkuni() ENDIF NUM = 0 KEY = 3 if ( jins.ne.1 ) then JINS = 1 !IMMEADIATELY SET BACK TO NORMAL BEHAVIOUR OR GO BESERK netstat = NETSTAT_CELLS_DIRTY end if ELSE IF (NUM .EQ. 6) THEN ! various IF (NWHAT .EQ. 1) THEN CALL STOPINT() ELSE IF (NWHAT .EQ. 2) THEN CALL SCHERM() ELSE IF (NWHAT .EQ. 3) THEN CALL CHANGEnetworkparameters() ELSE IF (NWHAT .EQ. 4) THEN CALL CHANGEorthoparameters() ELSE IF (NWHAT .EQ. 5) THEN CALL CHANGEGRIDPARAMETERS() ELSE IF (NWHAT .EQ. 6) THEN CALL CHANGEINTERPOLATIONPARAMETERS ELSE IF (NWHAT .EQ. 7) THEN CALL MAPPROJECTIONS(-1,JA) ! -1, INTERACTIEF if (ja == 1) then call minmxns() key = 3 endif ELSE IF (NWHAT .EQ. 8) THEN CALL CHANGETIMEPARAMETERS() ELSE IF (NWHAT .EQ. 9) THEN Call changegeometryparameters() ELSE IF (NWHAT .EQ. 10) THEN CALL CHANGEPHYSICALPARAMETERS() ELSE IF (NWHAT .EQ. 11) THEN CALL CHANGENUMERICALPARAMETERS() ELSE IF (NWHAT .EQ. 12) THEN CALL CHANGENUMERICALPARAMETERS2() ENDIF NUM = 0 ENDIF RETURN END SUBROUTINE CHOICES SUBROUTINE MENUV1(NUM,NWHAT) use m_netw implicit none integer :: NUM, NWHAT integer :: maxexp integer :: maxopt integer, parameter :: MAXOP = 50 CHARACTER*40 OPTION(MAXOP),EXP(MAXOP) integer :: MODE,NFLD, NFO integer :: jdemo COMMON /MODENOW/ MODE,NFLD COMMON /DEMO/ JDEMO IF (NUM .EQ. 1) THEN EXP(1) = 'MENU 1 ' EXP(2) = 'FILES ' OPTION(1 )= 'Load MDU-file (*.mdu)' OPTION(2 )= 'Load network (*.unt/*.net/*_net.nc)' OPTION(3 )= ' Add network (*.unt/*.net/*_net.nc)' OPTION(4 )= 'Load curvilinear grid (*.grd)' OPTION(5 )= 'Load arc-info grid (*.aht)' !! OPTION(20)= 'LOAD Untrim grd file, (*.unt)' OPTION(6 )= 'Load polygon (*.pol)' OPTION(7 )= 'Load splines (*.spl)' OPTION(8 )= 'Load land boundary (*.ldb)' OPTION(9 )= 'Load observation points (*_obs.xyn)' OPTION(10)= ' Add observation points (*_obs.xyn)' OPTION(11)= 'Load cross sections (*_crs.pli)' OPTION(12)= ' add cross sections (*_crs.pli)' OPTION(13)= 'Load thin dams (*_thd.pli)' OPTION(14)= ' add thin dams (*_thd.pli)' OPTION(15)= 'Load samples (*.xyz/*.dem/*.asc)' OPTION(16)= 'Load flow bathymetry (*.xybl or *.xyblu)' OPTION(17)= 'Load flow restart (*_rst.nc)' OPTION(18)= 'Load bitmap (*.bmp)' OPTION(19)= '- ' OPTION(20)= 'Save MDU-file (*.mdu)' OPTION(21)= 'Save network (*_net.nc)' OPTION(22)= 'Save network with cell info (*_net.nc)' OPTION(23)= 'Save network for Google Earth (*.kml)' #ifdef HAVE_TECPLOT OPTION(24)= 'Save network for Tecplot (*.plt)' #else OPTION(24)= 'Not available ' #endif OPTION(25)= 'Save curvilinear grid (*.grd)' OPTION(26)= 'Save polygon (*.pol)' OPTION(27)= 'Save splines (*.spl)' OPTION(28)= 'Save land boundary (*.ldb)' OPTION(29)= 'Save observation points (*_obs.xyn)' OPTION(30)= 'Save cross sections (*_crs.pli)' OPTION(31)= 'save samples (*.xyz)' OPTION(32)= 'save flow bathymetry (*.xybl or *.xyblu)' OPTION(33)= 'Save snapshot for restart (*_rst.nc)' OPTION(34)= 'Save snapshot net+s1+u1 (*_map.nc)' OPTION(35)= 'TMP read manually preprocessed SVG ' OPTION(36)= 'Save SWAN files (*.node and *.ele)' OPTION(37)= 'Save partition files (*_NNNN_net.nc)' OPTION(38)= 'Stop program ' MAXOPT = 38 ELSE IF (NUM .EQ. 2) THEN EXP(1) = 'MENU 2 ' EXP(2) = 'OPERATIONS ' OPTION(1) = 'Undo net ' OPTION(2) = 'Create uniform curvilinear grid ' OPTION(3) = 'Create curvilinear grid from splines ' OPTION(4) = 'Create curvilinear grid in polygon ' OPTION(5) = 'Create samples in polygon ' OPTION(6) = 'Triangulate samples to net in polygon ' OPTION(7) = 'Convert grid to net ' OPTION(8) = 'Orthogonalise / Smooth net ' OPTION(9) = '- ' OPTION(10)= 'Refine Polygon ' OPTION(11)= 'Refine quads factor 2 (triangle border) ' OPTION(12)= 'Refine cells factor 2 (Casulli-type) ' OPTION(13)= 'Refine cells and faces factor 2 ' OPTION(14)= 'Derefine quads factor 2 (Casulli-type) ' OPTION(15)= 'Connect curvilinear quads dd type ' OPTION(16)= 'Cutcells on polygon ' OPTION(17)= 'Copy and translate/rotate net ' OPTION(18)= 'External triangles to outer quads ' OPTION(19)= '- ' OPTION(20)= '(Re) initalise flow model geometry ' OPTION(21)= 'Refresh net adm. (setnodadm + findcells)' OPTION(22)= 'Interpolate Network ZK-values in samples' OPTION(23)= 'Interpolate Other, see Various/Int. Par.' OPTION(24)= 'Embed 1D channels in 2D network ' OPTION(25)= ' ' ! OPTION(25)= 'Flood fill waterlevels S1 from samples ' OPTION(26)= ' ' OPTION(27)= 'Do 1 FLOW step ' OPTION(28)= 'MAKECOARSE2FINETRIANGLECONNECTIONCELLS ' OPTION(29)= 'Renumber nodes ' OPTION(30)= 'Flip links ' OPTION(31)= 'Coarsen mesh ' OPTION(32)= 'Grow curvilinear grid from splines ' OPTION(33)= 'Make triangles from quads, pentas, hexas' OPTION(34)= 'Detect ridges in structured sample set ' OPTION(35)= 'Interp. sample data to net via curvigrid' OPTION(36)= ' ' OPTION(37)= 'Gen. domain numbers (polygons or METIS) ' OPTION(38)= 'Generate dual mesh ' OPTION(39)= 'Diff. samples w. 2nd samples ( nump use unstruc_model use m_samples use m_flowgeom use unstruc_display use m_flowparameters use unstruc_files, only:defaultFilename, close_all_files use unstruc_model use unstruc_netcdf use unstruc_opengis use io_openfoam use m_partitioninfo use m_sferic use m_flowtimes use dfm_error implicit none integer :: MODE, NUM, NWHAT, KEY integer :: ja, ierr integer :: mlan integer :: midp integer :: mtek integer :: ndraw integer :: i, k logical :: jawel COMMON /DRAWTHIS/ NDRAW(40) COMMON /BACKGROUND/ SCREENFILE CHARACTER FILNAM*76, SCREENFILE*76 KEY = 0 IF (NWHAT .EQ. 1) THEN FILNAM = '*.mdu' MLAN = 0 CALL FILEMENU(MLAN,FILNAM) IF (MLAN .EQ. -2) THEN CALL qnerror('file' , filnam, 'not found ') NUM = 1 ELSE IF (MLAN .LE. 0) THEN NUM = 1 ELSE call doclose(mlan) ! TODO: change... [AvD] call inidat() call resetFullFlowModel() CALL loadModel(filnam) call minmxns() ! Check for presence of associated display presets inquire (file = trim(md_ident)//'.cfg', exist = jawel) if (jawel) then ja = 1 ! CALL CONFRM('Model-specific display presets found in '//trim(md_ident)//'.cfg. Do you want to load these?', JA) if (JA == 1) THEN call load_displaysettings(trim(md_ident)//'.cfg') end if end if NDRAW(2) = 1 KEY = 3 NUM = 0 ENDIF ELSE IF (NWHAT .EQ. 2) THEN FILNAM = '*_net.nc' MLAN = 0 CALL FILEMENU(MLAN,FILNAM) IF (MLAN .EQ. -2) THEN CALL qnerror('file' , filnam, 'not found ') NUM = 1 ELSE IF (MLAN .LE. 0) THEN NUM = 1 ELSE call doclose(mlan) ! TODO: change... [AvD] CALL loadNetwork(filnam, JA, 0) IF (JA == 0) THEN CALL resetFlow() nump = 0 ! Reset cell data CALL MESSAGE('YOU LOADED ' , filnam, ' ') CALL MINMXNS() NDRAW(2) = 1 KEY = 3 NUM = 0 md_netfile = ' ' md_netfile = trim(filnam) ELSE CALL qnerror('NO NET LOADED', ' ', ' ') ENDIF ENDIF ELSE IF (NWHAT .EQ. 3) THEN FILNAM = '*_net.nc' MLAN = 0 CALL FILEMENU(MLAN,FILNAM) IF (MLAN .EQ. -2) THEN CALL qnerror('file' , filnam, 'not found ') NUM = 1 ELSE IF (MLAN .LE. 0) THEN NUM = 1 ELSE IF (INDEX(FILNAM, '.jan') > 0) then call REAJANET(Mlan,JA,1) ELSE IF (INDEX(FILNAM, '.adc') > 0) then call READADCIRCNET(Mlan,JA,1) else call doclose(mlan) ! TODO: change... [AvD] call loadNetwork(filnam, JA, 1) endif IF (JA == 0) THEN CALL MESSAGE('YOU LOADED ' , filnam, ' ') CALL MINMXNS() NDRAW(2) = 1 KEY = 3 NUM = 0 md_netfile = ' ' md_netfile = trim(filnam) ELSE CALL qnerror('NO NET LOADED', ' ', ' ') ENDIF ENDIF ELSE IF (NWHAT .EQ. 4) THEN FILNAM = '*.grd' MLAN = 0 CALL FILEMENU(MLAN,FILNAM) IF (MLAN .EQ. -2) THEN CALL qnerror('file' , filnam, 'not found ') NUM = 1 ELSE IF (MLAN .LE. 0) THEN NUM = 1 ELSE CALL REAgrid(MLAN,FILNAM,ja) ! DOORLADEN IF (JA .GE. 1) THEN CALL MESSAGE('YOU LOADED ' , filnam, ' ') CALL MINMXNS() NDRAW(2) = 1 KEY = 3 NUM = 0 ELSE CALL QNERROR('PREMATURE END OF FILE', FILNAM, ' ') ENDIF ENDIF ELSE IF (NWHAT .EQ. 5) THEN FILNAM = '*.asc' MLAN = 0 CALL FILEMENU(MLAN,FILNAM) IF (MLAN .EQ. -2) THEN CALL qnerror('file' , filnam, 'not found ') NUM = 1 ELSE IF (MLAN .LE. 0) THEN NUM = 1 ELSE CALL readarcinfo(MLAN,ja) ! DOORLADEN IF (JA .GE. 1) THEN CALL MESSAGE('YOU LOADED ' , filnam, ' ') CALL MINMXNS() NDRAW(2) = 1 KEY = 3 NUM = 0 ELSE CALL QNERROR('PREMATURE END OF FILE', FILNAM, ' ') ENDIF ENDIF ELSE IF (NWHAT .EQ. 6) THEN FILNAM = '*.pol,*.pli' MLAN = 0 CALL FILEMENU(MLAN,FILNAM) IF (MLAN .EQ. -2) THEN CALL qnerror('file' , filnam, 'not found ') NUM = 1 ELSE IF (MLAN .LE. 0) THEN NUM = 1 ELSE CALL REAPOL(MLAN, 0) IF (NPL .GT. 0) THEN CALL MESSAGE('YOU LOADED ' , filnam, ' ') CALL MINMXNS( ) KEY = 3 NUM = 0 ! read polygon: netcell administration out of date netstat = NETSTAT_CELLS_DIRTY ELSE CALL qnerror('file' , filnam, 'not found ') ENDIF ENDIF ELSE IF (NWHAT .EQ. 7) THEN FILNAM = '*.spl' MLAN = 0 CALL FILEMENU(MLAN,FILNAM) IF (MLAN .GE. 1) THEN CALL readSplines(mlan) IF (mcs .GT. 0) THEN CALL MESSAGE('You Opened File ', FILNAM, ' ') CALL MINMXNS() NUM = 0 NDRAW(15) = 1 KEY = 3 ENDIF ENDIF ELSE IF (NWHAT .EQ. 8) THEN FILNAM = '*.ldb' MLAN = 0 CALL FILEMENU(MLAN,FILNAM) IF (MLAN .EQ. -2) THEN CALL qnerror('file' , filnam, 'not found ') NUM = 1 ELSE IF (MLAN .LE. 0) THEN NUM = 1 ELSE i = len_trim(filnam) if (i > 3) then if (filnam(i-2:i) == '.nc') then call doclose(mlan) call read_land_boundary_netcdf(filnam) return end if end if CALL REALAN(MLAN) IF (MXLAN .GT. 0) THEN CALL MESSAGE('YOU LOADED ' , filnam, ' ') CALL MINMXNS() NDRAW(3) = 1 KEY = 3 NUM = 0 md_ldbfile = ' ' md_ldbfile = filnam ELSE CALL qnerror('MXLAN = 0',' ',' ') ENDIF ENDIF ELSE IF (NWHAT .EQ. 9 .or. NWHAT .EQ. 10 ) THEN FILNAM = '*_obs.xyn' MLAN = 0 CALL FILEMENU(MLAN,FILNAM) IF (MLAN .EQ. -2) THEN CALL qnerror('file' , filnam, 'not found ') NUM = 1 ELSE IF (MLAN .LE. 0) THEN NUM = 1 ELSE ja = 0 key = 3 call doclose(mlan) ! Ugly, but loadObservations reads by filename, not filepointer [AvD] if (NWHAT == 10) then ja = 1 ! doorladen else ja = 0 end if call loadObservations(filnam, ja) CALL MESSAGE('YOU LOADED ' , filnam, ' ') CALL MINMXNS() md_obsfile = ' ' md_obsfile = filnam ENDIF ELSE IF (NWHAT .EQ. 11 .or. NWHAT .EQ. 12 ) THEN FILNAM = '*_crs.pli' MLAN = 0 CALL FILEMENU(MLAN,FILNAM) IF (MLAN .EQ. -2) THEN CALL qnerror('file' , filnam, 'not found ') NUM = 1 ELSE IF (MLAN .LE. 0) THEN NUM = 1 ELSE ja = 0 key = 3 if (NWHAT == 12) then ja = 1 ! doorladen else ja = 0 end if CALL REAPOL(MLAN, ja) ! Read pol/pli as crs call pol_to_crosssections(xpl, ypl, npl, names=nampli) if ( NPL.gt.0 ) call delpol() CALL MESSAGE('YOU LOADED ' , filnam, ' ') CALL MINMXNS() md_crsfile = ' ' md_crsfile = filnam ENDIF ELSE IF (NWHAT .EQ. 13 .or. NWHAT .EQ. 14 ) THEN FILNAM = '*_thd.pli' MLAN = 0 CALL FILEMENU(MLAN,FILNAM) IF (MLAN .EQ. -2) THEN CALL qnerror('file' , filnam, 'not found ') NUM = 1 ELSE IF (MLAN .LE. 0) THEN NUM = 1 ELSE ja = 0 key = 3 if (NWHAT == 14) then ja = 1 ! doorladen else ja = 0 end if CALL REAPOL(MLAN, ja) ! Read pol/pli as thin dam-type crs call pol_to_thindams(xpl, ypl, npl) CALL MESSAGE('YOU LOADED ' , filnam, ' ') CALL MINMXNS() md_thdfile = ' ' md_thdfile = filnam ENDIF ELSE IF (NWHAT .EQ. 15) THEN FILNAM = '*.xyz,*.dem,*.asc' MLAN = 0 CALL FILEMENU(MLAN,FILNAM) IF (MLAN .EQ. -2) THEN CALL qnerror('file' , filnam, 'not found ') NUM = 1 ELSE IF (MLAN .LE. 0) THEN NUM = 1 ELSE ja = 0 key = 3 i = len_trim(filnam) if (i > 3) then if (filnam(i-3:i) == '.dem' .or. filnam(i-3:i) == '.DEM') then call doclose(mlan) call read_samples_from_dem(trim(filnam), ja) else if (filnam(i-3:i) == '.asc' .or. filnam(i-3:i) == '.ASC') then call doclose(mlan) ! delete all samples, regardless of selecting polygon call savepol() call delpol() call savesam() call delsam(0) call restorepol() call read_samples_from_arcinfo(trim(filnam), ja) else CALL reasam(MLAN,ja) ! DOORLADEN end if else CALL reasam(MLAN,ja) ! DOORLADEN end if CALL MESSAGE('YOU LOADED ' , filnam, ' ') CALL MINMXNS() ENDIF ELSE IF (NWHAT .EQ. 16) THEN if (ndx == 0 .or. lnx == 0) then call qnerror('First reinitialise flow model, current dimensions are 0',' ',' ') return endif if (ibedlevtyp == 1) then FILNAM = '*.xybl' else if (ibedlevtyp == 2) then FILNAM = '*.xyblu' else CALL qnerror('Loading cell bottom levels bl (ibedlevtyp=1) or flow link bottom levels blu (ibedlevtyp=2)',' ',' ') CALL qnerror('Change parameter ibedlevtyp in Various, Change Geometry Parameters',' ',' ') return endif MLAN = 0 CALL FILEMENU(MLAN,FILNAM) IF (MLAN .EQ. -2) THEN CALL qnerror('file' , filnam, 'not found ') NUM = 1 ELSE IF (MLAN .LE. 0) THEN NUM = 1 ELSE if (ibedlevtyp == 1) then CALL reabl(MLAN) else if (ibedlevtyp == 2) then CALL reablu(MLAN) endif CALL MESSAGE('YOU LOADED ' , filnam, ' ') ! CALL MINMXNS() ENDIF ELSE IF (NWHAT .EQ. 17) THEN FILNAM = '*_rst.nc' MLAN = 0 CALL FILEMENU(MLAN,FILNAM) IF (MLAN .EQ. -2) THEN CALL qnerror('file' , filnam, 'not found ') NUM = 1 ELSE IF (MLAN .LE. 0) THEN NUM = 1 ELSE i = len_trim(filnam) if (filnam(i-6:i) == '_rst.nc' .or. filnam(i-6:i) == '_RST.NC') then call doclose(mlan) ! TODO: change... [AvD] call read_restart_from_map(FILNAM, ierr) call setucxucyucxuucyu() ! reconstruct cell center velocities if (ierr /= DFM_NOERR) then JA = 0 else JA = 1 end if else call rearst(MLAN,JA) endif !else if (filnam(i-6:i) == '_map.nc' .or. filnam(i-6:i) == '_MAP.NC') then ! call doclose(MLAN) ! call read_restart_from_map(FILNAM,JA) ! ! TODO: AvD: No flow_setstarttime here? if (JA == 1) then call MESSAGE('YOU LOADED ' , filnam, ' ') else call qnerror('NO RESTART LOADED', ' ', ' ') endif ! CALL MINMXNS() ENDIF ELSE IF (NWHAT .EQ. 18) THEN NUM = 0 FILNAM = '*.bmp' MIDP = 0 CALL FILEMENU(MIDP,FILNAM) IF (MIDP .LE. 0) THEN NDRAW(26) = 0 ELSE IF (MIDP .GE. 1) THEN CALL DOCLOSE(MIDP) CALL LOADBITMAP(FILNAM) CALL MESSAGE('YOU LOADED ' , filnam, ' ') CALL MINMXNS( ) ENDIF KEY = 3 ELSE IF (NWHAT .EQ. 20) THEN FILNAM = '*.mdu' MTEK = 1 CALL FILEMENU(MTEK,FILNAM) IF (MTEK .LE. 0) THEN NUM = 1 ELSE call doclose(mtek) call writeMDUFile(filnam, ja) CALL MESSAGE('YOU SAVED ' , filnam, ' ') NUM = 0 ENDIF ELSE IF (NWHAT .EQ. 21 .or. NWHAT .EQ. 22 .or. NWHAT .EQ. 24) THEN IF (NUMK .EQ. 0) THEN CALL QNERROR('NO NET TO SAVE',' ',' ') NUM = 0 ELSE if ( nwhat.eq.21 .or. nwhat .eq. 22) then FILNAM = '*_net.nc' else if ( nwhat.eq.24 ) then FILNAM = '*_net.plt' end if MTEK = 1 CALL FILEMENU(MTEK,FILNAM) IF (MTEK .LE. 0) THEN NUM = 1 ELSE call doclose(mtek) if (nwhat.eq.21) then call unc_write_net(filnam, janetcell = 0, janetbnd = 0) else if ( nwhat .eq. 22) then ! _net.nc with extra cell info (for example necessary for Baseline/Bas2FM input) if ( netstat.ne.NETSTAT_OK ) then call findcells(0) end if call unc_write_net(filnam, janetcell = 1, janetbnd = 0) else if ( nwhat.eq.24 ) then call ini_tecplot() call wrinet_tecplot(filnam) end if CALL MESSAGE('YOU SAVED ' , filnam, ' ') md_netfile = ' ' md_netfile = filnam !CALL NEWFIL(MTEK, 'NET.NET' ) !CALL WRINET(MTEK) !CALL MESSAGE('AUTOSAVED NET.NET',' ',' ') NUM = 0 ENDIF ENDIF ELSE IF (NWHAT .EQ. 23) THEN IF (NUMK .EQ. 0) THEN CALL QNERROR('NO NET TO SAVE',' ',' ') NUM = 0 ELSE !call foam_write_polymesh('testfoam') FILNAM = '*.kml' MTEK = 1 ja = 1 if (jsferic /= 1) then call confrm('Model is not in spherical coordinates. Proceed? (not recommended)', ja) end if if (ja == 1) then call change_kml_parameters(ja) else ja = 1 ! Hereafter, 1 means 'no/cancelled' end if if (ja==0) then ! 0: NOT cancelled CALL FILEMENU(MTEK,FILNAM) IF (MTEK .LE. 0) THEN NUM = 1 ELSE call doclose(mtek) call kml_write_net(filnam) CALL MESSAGE('YOU SAVED ' , filnam, ' ') NUM = 0 end if ENDIF ENDIF ELSE IF (NWHAT .EQ. 24) THEN ELSE IF (NWHAT .EQ. 25) THEN IF (MC == 0 .or. NC == 0) THEN CALL QNERROR('NO GRID TO SAVE',' ',' ') NUM = 0 ELSE FILNAM = '*.grd' MTEK = 1 CALL FILEMENU(MTEK,FILNAM) IF (MTEK .LE. 0) THEN NUM = 1 ELSE call wrirgf(mtek, filnam) CALL MESSAGE('YOU SAVED ' , filnam, ' ') NUM = 0 ENDIF ENDIF ELSE IF (NWHAT .EQ. 26) THEN IF (NPL .EQ. 0) THEN CALL QNERROR('THERE IS NO POLYGON TO SAVE',' ',' ') NUM = 0 ELSE FILNAM = '*.pol,*.pli' MIDP = 1 CALL FILEMENU(MIDP,FILNAM) IF (MIDP .LE. 0) THEN NUM = 1 ELSE CALL WRIPOL(MIDP) if ( index(Filnam,'crs') == 0 .and. index(Filnam,'CRS') == 0 .and. index(Filnam,'vlay') == 0 .and. index(Filnam,'VLAY') == 0) then call wricmps(filnam) endif CALL MESSAGE('YOU SAVED ' , filnam, ' ') NUM = 0 ENDIF ENDIF ELSE IF (NWHAT .EQ. 27) THEN IF (mcs .EQ. 0) THEN CALL QNERROR('There Are No Splines to SAVE',' ',' ') ELSE FILNAM = '*.spl' MLAN = 1 CALL FILEMENU(MLAN,FILNAM) IF (MLAN .GE. 1) THEN CALL writeSplines(MLAN) CALL MESSAGE('You Saved File ', FILNAM, ' ') ENDIF ENDIF ELSE IF (NWHAT .EQ. 28) THEN IF (MXLAN .EQ. 0) THEN CALL QNERROR('THERE IS NO LANDBOUNDARY TO SAVE',' ',' ') NUM = 0 ELSE FILNAM = '*.ldb' MIDP = 1 CALL FILEMENU(MIDP,FILNAM) IF (MIDP .LE. 0) THEN NUM = 1 ELSE CALL WRILAN(MIDP) CALL MESSAGE('YOU SAVED ' , filnam, ' ') NUM = 0 md_ldbfile = ' ' md_ldbfile = filnam ENDIF ENDIF ELSE IF (NWHAT .EQ. 29) THEN IF (numobs .EQ. 0) THEN CALL QNERROR('THERE are NO observation points TO SAVE',' ',' ') NUM = 0 ELSE FILNAM = defaultFilename('obs') MIDP = 1 CALL FILEMENU(MIDP,FILNAM) IF (MIDP .LE. 0) THEN NUM = 1 ELSE call doclose(midp) CALL saveObservations(filnam) CALL MESSAGE('YOU SAVED ' , filnam, ' ') NUM = 0 md_obsfile = ' ' md_obsfile = filnam ENDIF ENDIF ELSE IF (NWHAT .EQ. 30) THEN IF (ncrs .EQ. 0) THEN CALL QNERROR('THERE are NO cross sections TO SAVE',' ',' ') NUM = 0 ELSE FILNAM = '*_crs.pli' MIDP = 1 CALL FILEMENU(MIDP,FILNAM) IF (MIDP .LE. 0) THEN NUM = 1 ELSE CALL WRICRS(MIDP) CALL MESSAGE('YOU SAVED ' , filnam, ' ') NUM = 0 md_crsfile = ' ' md_crsfile = filnam ENDIF ENDIF ELSE IF (NWHAT .EQ. 31) THEN IF (Ns .EQ. 0) THEN CALL QNERROR('THERE are NO samples TO SAVE',' ',' ') NUM = 0 ELSE FILNAM = '*.xyz' MIDP = 1 CALL FILEMENU(MIDP,FILNAM) IF (MIDP .LE. 0) THEN NUM = 1 ELSE CALL WRIsam(MIDP) CALL MESSAGE('YOU SAVED ' , filnam, ' ') NUM = 0 ENDIF ENDIF ELSE IF (NWHAT .EQ. 32) THEN if (ndx == 0 .or. lnx == 0) then call qnerror('First reinitialise flow model, current dimensions are 0',' ',' ') return else if (ibedlevtyp == 1) then FILNAM = '*.xybl' else if (ibedlevtyp == 2) then FILNAM = '*.xyblu' else CALL qnerror('Just saving the network is sufficient for (preferred option) ibedlevtyp = 3 ',' ',' ') CALL qnerror('See Various, Change Geometry Parameters ',' ',' ') return endif MIDP = 1 CALL FILEMENU(MIDP,FILNAM) IF (MIDP .LE. 0) THEN NUM = 1 ELSE if (ibedlevtyp == 1) then CALL WRIbl(MIDP) else if (ibedlevtyp == 2) then CALL WRIblu(MIDP) endif CALL MESSAGE('YOU SAVED ' , filnam, ' ') NUM = 0 ENDIF ENDIF ELSE IF (NWHAT .EQ. 33) THEN IF (NDX .EQ. 0) THEN CALL QNERROR('THERE IS NO FLOW TO SAVE',' ',' ') NUM = 0 ELSE FILNAM = '*_rst.nc' MIDP = 1 CALL FILEMENU(MIDP,FILNAM) IF (MIDP .LE. 0) THEN NUM = 1 ELSE call doclose(midp) CALL unc_write_rst(filnam) call wrirstfileold(time1) CALL MESSAGE('YOU SAVED ' , filnam, ' ') NUM = 0 ENDIF ENDIF ELSE IF (NWHAT .EQ. 34) THEN IF (NDX .EQ. 0) THEN CALL QNERROR('THERE IS NO FLOW TO SAVE',' ',' ') NUM = 0 ELSE FILNAM = '*_map.nc' MIDP = 1 CALL FILEMENU(MIDP,FILNAM) IF (MIDP .LE. 0) THEN NUM = 1 ELSE call doclose(midp) CALL unc_write_map(filnam) CALL MESSAGE('YOU SAVED ' , filnam, ' ') NUM = 0 ENDIF ENDIF ELSE IF (NWHAT .EQ. 35) THEN FILNAM = '*' MIDP = 0 CALL FILEMENU(MIDP,FILNAM) IF (MIDP .LE. 0) THEN NUM = 1 ELSE call doclose(midp) call parsekerst(filnam) NUM = 0 KEY = 3 ENDIF ! ! ! ELSE IF (NWHAT .EQ. 20) THEN ! FILNAM = '*.unt' ! MLAN = 0 ! CALL FILEMENU(MLAN,FILNAM) ! IF (MLAN .EQ. -2) THEN ! CALL qnerror('file' , filnam, 'not found ') ! NUM = 1 ! ELSE IF (MLAN .LE. 0) THEN ! NUM = 1 ! ELSE ! CALL reajanet(MLAN,JA,1) !1=DOORLADEN ! CALL MESSAGE('YOU LOADED ' , filnam, ' ') ! CALL MINMXNS() ! KEY = 3 ! ! ENDIF ELSE IF (NWHAT .EQ. 36) THEN IF (numk .EQ. 0) THEN CALL QNERROR('THERE is no network to save ',' ',' ') NUM = 0 ELSE FILNAM = '*.node' MIDP = 1 CALL FILEMENU(MIDP,FILNAM) IF (MIDP .LE. 0) THEN NUM = 1 ELSE CALL WRIswan(MIDP,filnam) CALL MESSAGE('YOU SAVED ' , filnam, ' ') NUM = 0 ENDIF ENDIF ELSE IF (NWHAT .EQ. 37 ) THEN ! partition files if ( npartition_pol.lt.1 ) then call qnerror('no partitions found', ' ', ' ') else ! FILNAM = '*_net.nc' filnam = md_netfile MTEK = 1 CALL FILEMENU(MTEK,FILNAM) IF (MTEK .LE. 0) THEN NUM = 1 ELSE call doclose(mtek) call partition_write_domains(filnam,6) ! make subdomains for default solver CALL MESSAGE('YOU SAVED ' , filnam, ' partitions') md_netfile = ' ' md_netfile = filnam !CALL NEWFIL(MTEK, 'NET.NET' ) !CALL WRINET(MTEK) !CALL MESSAGE('AUTOSAVED NET.NET',' ',' ') NUM = 0 ENDIF end if ELSE IF (NWHAT .EQ. 38) THEN CALL STOPINT() NUM = 0 ENDIF ! Nader uitwerken, of helemaal overboord ermee NUM = 0 RETURN END SUBROUTINE NFILES SUBROUTINE DRAWNU(KEY) use m_netw USE M_SAMPLES use unstruc_display use unstruc_opengl implicit none double precision :: epsgs integer :: itgs integer :: maxitgs integer :: metdraw integer :: ndraw integer :: KEY, ja, nsiz COMMON /DRAWTHIS/ NDRAW(40) COMMON /SOLVER/ EPSGS, MAXITGS, ITGS ! IF (KEY .NE. 3) RETURN METDRAW = NDRAW(9) CALL IMouseCursorHIDE() CALL PLOT(NDRAW(10)) IF (NDRAW(10) .EQ. -1) THEN RETURN ENDIF IF (METDRAW .EQ. 1) CALL FULLSCREEN() IF (NDRAW(1) .EQ. 1 .and. jaOpenGL.eq.0 ) CALL CLS1() IF (NDRAW(26) .EQ. 1) CALL SHOWBITMAP(0) IF (METDRAW .EQ. 1) CALL SMALLSCREEN() METDRAW = NDRAW(9) CALL BEGINRENDER() ! ndraw(28)= show what on nodes ndraw(19)=how to show on nodes , NDRAW(8) = SHOW WHAT ON NETNODES ! ndraw(29)= show what on links ndraw(11)=how to show on links , NDRAW(7) = SHOW WHAT ON NETLINKS if (ndraw(3) > 4) CALL TEKLAN(NCOLLN) IF (NDRAW(7) .GE. 2) THEN CALL NETLINKVALS(NDRAW(7),NCOLLN) CALL MINMXNETLINS() ENDIF IF (NDRAW(8) .GE. 2) THEN CALL NETNODEVALS(NDRAW(8)) CALL MINMXNETNODS() ENDIF IF (METDRAW .EQ. 1) THEN ! if (ns > 0) then ! call teksam(xs,ys,zs,ns,ndraw(32)) ! endif ! CALL BEGINRENDER() CALL TEKNETSTUFF(key) CALL TEKFLOWSTUFF(key) call highlight_nodesnlinks() call TEKgrid(key) if (ns > 0) then call teksam(xs,ys,zs,ns,ndraw(32)) endif if (ndraw(2) == 6) CALL TEKNET(NCOLDN,key) ! network on top if (ndraw(3) <= 4) CALL TEKLAN(NCOLLN) call plotObservations() call plotSplines() ! obs plotting used to be here [AvD] if (NDRAW(18) > 1) then nsiz = ndraw(18)-1 call tekrai(nsiz,ja) endif call tekprofs() ! and initialise some turb parstm.amp call plotCrossSections() call plotThinDams() call plotFixedWeirs() call plotManholes() if (ndrawpol > 1) then call tekpolygon() endif ! WARNING: Anything drawn up to this point with something other than OpenGL, is overwritten! ! So make sure you use OpenGL for any rendering up to this point, move EndRender up, or place ! that graphics code after EndRender. CALL ENDRENDER() ! Tiemen: moved sideview rendering here because it draws differently and was more involved to ! make compatible with OpenGL ! if (NDRAW(18) > 1) then ! call tekrai(ndraw(18)-1,key) ! endif ELSE IF (METDRAW .EQ. 2) THEN ! CALL PERSPC() ENDIF IF (METDRAW .EQ. 1) CALL FULLSCREEN() CALL ISOSCALE() CALL ISOSCALE2() CALL TXTLINES() IF (METDRAW .EQ. 1) CALL SMALLSCREEN() IF (METDRAW .EQ. 1) CALL AXES() CALL ANCHORCLS() CALL DISPOS() CALL TEXTFLOW() CALL IMouseCursorShow() IF (NDRAW(10) .EQ. 2) THEN CALL PLOT(NDRAW(10)) ENDIF RETURN END SUBROUTINE DRAWNU subroutine tekpolygon() use m_polygon use unstruc_display use m_missing implicit none logical, external :: inview integer :: k,ncol,kk, key,k2 double precision :: a,b,f,x,y,z,s,c,d,dx,dy,dz if (ndrawpol == 2) then CALL DISP2C(XPL, YPL, NPL, RCIR, NCOLTX) else if (ndrawpol == 3) then call linewidth(3) do k = 1,npl-1 if (zpl(k) .ne. dmiss) then if ( inview( xpl(k), ypl(k) ) .AND. inview ( xpl(k+1), ypl(k+1) ) ) then call isocol( (zpl(k)+zpl(k+1))/2, ncol) call movabs(xpl(k) , ypl(k)) call lnabs (xpl(k+1), ypl(k+1)) endif endif enddo call linewidth(1) else if (ndrawpol == 4 .or. ndrawpol == 5 .or. ndrawpol == 6) then CALL DISP2C(XPL, YPL, NPL, 0d0, NCOLTX) CALL SETCOL(NCOLBLACK) do k = 1,npl if ( inview(xpl(k), ypl(k) ) ) then if ( ndrawpol == 4) then call HTEXT(Zpl(k),Xpl(k),Ypl(k)) else if ( ndrawpol == 5 .and. jakol45 > 0) then call HTEXT(dzL(k),Xpl(k),Ypl(k)) else if ( ndrawpol == 6 .and. jakol45 > 0) then call HTEXT(dzr(k),Xpl(k),Ypl(k)) endif endif enddo else if (ndrawpol == 7 .and. jakol45 > 0) then do k = 1,npl-1 IF (MOD(k,100) == 0) THEN CALL HALT2(KEY) IF (KEY .EQ. 1) RETURN ENDIF if (zpl(k) .ne. dmiss) then if ( inview( xpl(k), ypl(k) ) .AND. inview ( xpl(k+1), ypl(k+1) ) ) then call isocol( (zpl(k)+zpl(k+1))/2, ncol) call movabs(xpl(k) , ypl(k)) call lnabs (xpl(k+1), ypl(k+1)) call sincosdis (xpl(k), ypl(k), xpl(k+1), ypl(k+1), s, c, d) dy = rcir*c dx = -rcir*s k2 = max(2, int (d /(3d0*rcir)) ) do kk = 1, k2 a = 1d0 - dble(kk)/dble(k2) b = 1d0-a x = a*xpl(k) + b*xpl(k+1) y = a*ypl(k) + b*ypl(k+1) z = a*zpl(k) + b*zpl(k+1) dz = a*dzl(k) + b*dzl(k+1) f = dz/5d0 call isocol( z-dz, ncol ) call movabs( x+f*dx, y+f*dy ) call lnabs( x, y ) dz = a*dzr(k) + b*dzr(k+1) f = dz/5d0 call isocol( z-dz, ncol ) call lnabs ( x-f*dx, y-f*dy ) enddo endif endif enddo else if ( ndrawpol == 8 ) then CALL DISP2C(XPL, YPL, NPL, RCIR, NCOLTX) do k = 1,npl if ( inview(xpl(k), ypl(k) ) ) then call HTEXT(dble(k),Xpl(k),Ypl(k)) endif enddo call hTEXT(dble(k),Xpl(k),Ypl(k)) endif end subroutine tekpolygon SUBROUTINE TEKNETSTUFF(key) use unstruc_colors use unstruc_display, only: jaHighlight use m_netw implicit none integer :: ndraw double precision :: XP, YP integer :: key, K1, K2 COMMON /DRAWTHIS/ NDRAW(40) IF (NDRAW(7) .GE. 2) CALL TEKLINKVALS(NDRAW(11)) IF (NDRAW(8) .GE. 2) CALL TEKNODEVALS(NDRAW(19)) CALL TEKNET(NCOLDN,key) CALL TEKPREVIOUSNET(NCOLRN) IF (NDRAW(7) .GE. 2) CALL TEKLINKNUMS(NDRAW(11),NCOLLN) IF (NDRAW(8) .GE. 2) CALL TEKNODENUMS(NDRAW(19),NCOLDN) CALL TEKNETCELLS(NDRAW(33),0,1) ! CALL TEKBOTTOM(NDRAW(27)) old net stuff if (jaHighlight == 1) then if (nOdmax .ne. 0) then call gtext( 'NETNODMax', xK(nOdmax), yK(nOdmax), 31 ) endif if (nOdmin .ne. 0) then call gtext( 'NETNODMin', xK(nOdmin), yK(nOdmin), 221 ) endif if (LINmax .ne. 0) then K1 = KN(1,LINMAX) K2 = KN(2,LINMAX) IF (K1 .NE. 0 .AND. K2 .NE. 0) THEN XP = 0.5D0*(XK(K1) + XK(K2) ) YP = 0.5D0*(YK(K1) + YK(K2) ) ENDIF call gtext( 'NETLINMax', XP, YP, 31 ) endif if (LINmin .ne. 0) then K1 = KN(1,LINMIN) K2 = KN(2,LINMIN) IF (K1 .NE. 0 .AND. K2 .NE. 0) THEN XP = 0.5D0*(XK(K1) + XK(K2) ) YP = 0.5D0*(YK(K1) + YK(K2) ) call gtext( 'NETLINMin', XP, YP, 221 ) ENDIF endif if (netcelmax .ne. 0) then call gtext( 'NETcelmax', xzw(netcelmax), yzw(netcelmax), 31 ) endif if (netcelmin .ne. 0) then call gtext( 'NETcelmin', xzw(netcelmin), yzw(netcelmin), 221 ) endif end if RETURN END SUBROUTINE TEKNETSTUFF subroutine teknetcells(netwhat, jahalt, jacol) use m_netw use m_flowgeom use unstruc_display use m_missing use m_partitioninfo use m_alloc implicit none integer, intent (in) :: netwhat, jahalt, jacol double precision :: xx(6), yy(6), zz(6), aspect, uu1, vv1, uu2, vv2, VFAC,VFACFORCE double precision, allocatable :: zn(:) double precision :: xc, yc integer :: k, kk, n,ja, ncol, nodemode, nn, nvec integer :: ntopology, numcellstoplot double precision, external :: znetcell double precision, external :: coarsening_info logical, external :: inview COMMON /VFAC/ VFAC,VFACFORCE,NVEC COMMON /DRAWTHIS/ NDRAW(40) integer :: ndraw, ierr if ( netwhat .le. 1 ) return nodemode = NDRAW(19) ntopology = numk + numl if ( ntopology .ne. lasttopology ) THEN ! coarsening info if ( ubound(lnn,1).ne.numL ) then call findcells(100) if ( netwhat.ge.15.and.netwhat.le.19 ) call find1dcells() ! partitioning info else call setnodadm(0) ! in case the administration is out of date end if call makenetnodescoding() end if numcellstoplot = nump if ( netwhat.eq.2 .or. netwhat.ge.15.and.netwhat.le.19 ) numcellstoplot = nump1d2d ! only for cell or domain numbers if ( numcellstoplot.gt.size(rlin) ) then call realloc(rlin,numcellstoplot) end if call setcol(0) ! uncomment the following to refresh netcell administration, based on module variable netstat ! if ( netstat /= NETSTAT_OK ) then ! call findcells(100) ! end if ! scalars if ( netwhat .ne. 4 ) then if ( netwhat .eq.7 ) then ! coarsening info do k = 1,nump rlin(k) = coarsening_info(k) enddo else if (netwhat < 14 ) then ! default do k = 1,numcellstoplot rlin(k) = znetcell(k) enddo else if ( ( netwhat.eq.15 .or. netwhat.eq.16 ) .and. allocated(idomain) ) then ! partitioning info if ( size(idomain).ge.numcellstoplot ) then if ( netwhat.eq.15 ) then do k=1,numcellstoplot rlin(k) = dble(idomain(k)) end do else if ( netwhat.eq.16 .and. allocated(numndx) ) then ! partitioning info do k=1,numcellstoplot rlin(k) = dble(numndx(idomain(k))) end do end if end if else if ( netwhat.eq.17 .or. netwhat.eq.18 .or. netwhat.eq.19 ) then ! ghost levels if ( allocated(ighostlev) ) then if ( size(ighostlev).ge.numcellstoplot ) then do k=1,numcellstoplot if ( netwhat.eq.17) then rlin(k) = dble(ighostlev(k)) else if ( netwhat.eq.18 ) then rlin(k) = dble(ighostlev_cellbased(k)) else rlin(k) = dble(ighostlev_nodebased(k)) end if end do end if end if else if ( netwhat.eq.20 ) then ! global cell number if ( allocated(iglobal) ) then if ( size(iglobal).gt.numcellstoplot ) then do k=1,numcellstoplot rlin(k) = dble(iglobal(k)) end do end if end if end if if(nodemode.eq.3 .or. nodemode.eq. 6 .and. netwhat < 14) then call copynetcellstonetnodes() endif call MINMXNETCELLS() do k = 1,numcellstoplot if (mod(k,200) == 0) then if (jahalt.ne.-1234) call halt2(ja) if (ja == 1) return endif if (inview( xzw(k), yzw(k) ) .and. rlin(k).ne.DMISS ) then if (nodemode.eq.2 .or. nodemode.eq.6 .or. & nodemode.eq.7 .or. nodemode.eq.8) then ! numbers call setcol(1) if ( netwhat.eq.2 .or. netwhat.eq.15 ) then ! cell numbers or domain numbers call dhitext( int(rlin(k)), xzw(k), yzw(k), yzw(k) ) else call dhtext( dble(rlin(k)), xzw(k), yzw(k), yzw(k) ) end if end if if (nodemode.eq.3 .or. nodemode.eq. 6) then ! isolines within cell call ISOSMOOTHnet(k) else if (nodemode.eq.4 .or. nodemode.eq. 7) then ! isofil= cellfill call isocol(dble(rlin(k)),ncol) nn = netcell(k)%n do kk=1,nn xx(kk) = xk(netcell(k)%nod(kk)) yy(kk) = yk(netcell(k)%nod(kk)) end do call PFILLER(xx, yy, nn, NCol, NCol) else if (nodemode.eq.5 .or. nodemode.eq.8 ) then call isocol(dble(rlin(k)),ncol) call drcirc(xzw(k),yzw(k),dble(rlin(k))) endif endif enddo end if ! vectors if (netwhat == 4 .or. netwhat == 5) then do k = 1,numcellstoplot if (mod(k,200) == 0) then if (jahalt.ne.-1234) call halt2(ja) if (ja == 1) return endif if (inview( xzw(k), yzw(k) ) ) then call orthonet_compute_orientation(aspect, uu1, vv1, uu2, vv2, k) if ( jacol .eq. 1 ) call setcol(3) if ( uu1**2 + vv1**2 .lt. uu2**2 + vv2**2 ) then if ( jacol .eq. 1 ) call setcol(3) call arrowsxy( xzw(k), yzw(k), uu1, vv1, 0.5d0*VFAC) call arrowsxy( xzw(k), yzw(k), uu1, vv1, -0.5d0*VFAC) if ( jacol .eq. 1 ) call setcol(221) else if ( jacol .eq. 1 ) call setcol(221) call arrowsxy( xzw(k), yzw(k), uu1, vv1, 0.5d0*VFAC) call arrowsxy( xzw(k), yzw(k), uu1, vv1, -0.5d0*VFAC) if ( jacol .eq. 1 ) call setcol(3) end if call arrowsxy( xzw(k), yzw(k), uu2, vv2, 0.5d0*VFAC) call arrowsxy( xzw(k), yzw(k), uu2, vv2, -0.5d0*VFAC) endif enddo endif END SUBROUTINE TEKNETCELLS double precision function znetcell(k) use unstruc_display use m_netw use m_flowgeom use m_missing implicit none integer :: k, k1, k2, k3, n, ja double precision :: uu1, vv1, uu2, vv2 ! not used here double precision :: xdum, ydum, area, phimin, phimax double precision :: xx1,yy1,zz1,xx2,yy2,zz2,xx3, yy3, zz3, xy, rn, R3, XN, YN, ZN, DEPTH, TSIG, SLOPE, RK double precision, external :: dbdistance COMMON /DRAWTHIS/ NDRAW(40) integer :: ndraw znetcell = DMISS if ( NDRAW(33)>= 3 .and. NDRAW(33)<=5) then call orthonet_compute_orientation(znetcell, uu1, vv1, uu2, vv2, k) else if ( ndraw(33)==6) then ! cell area znetcell = sqrt(ba(k)) else if ( ndraw(33)==2 ) then ! cell numbers if ( netcell(k)%N.gt.0 ) znetcell = dble(k) else if ( ndraw(33)==8 ) then ! cell tri, 4, 5etc znetcell = dble( netcell(k)%n ) else if ( ndraw(33)==9 ) then ! cell normalised centre of gravity - circumcentre distance if (ba(k) > 0) then znetcell = dbdistance(xz(k),yz(k), xzw(k), yzw(k)) / sqrt(ba(k)) else znetcell = 0d0 endif else if ( ndraw(33)==10 .or. ndraw(33)==11 ) then ! slope k1 = netcell(k)%nod(1) k2 = netcell(k)%nod(2) k3 = netcell(k)%nod(3) XX1 = Xk(k1) - Xk(k2) ! getdx etc YY1 = Yk(k1) - Yk(k2) ZZ1 = Zk(k1) - Zk(k2) XX2 = Xk(k1) - Xk(k3) YY2 = Yk(k1) - Yk(k3) ZZ2 = Zk(k1) - Zk(k3) XX3 = (YY1*ZZ2 - YY2*ZZ1) YY3 = -(XX1*ZZ2 - XX2*ZZ1) ZZ3 = (XX1*YY2 - XX2*YY1) R3 = SQRT(XX3*XX3 + YY3*YY3 + ZZ3*ZZ3) IF (R3 .NE. 0) THEN XN = XX3/R3 YN = YY3/R3 ZN = ZZ3/R3 XY = SQRT(XN*XN + YN*YN) IF (ZN .NE. 0) THEN slope = ABS(XY/ZN) znetcell = slope IF (ndraw(33) == 11) THEN DEPTH = - (ZK(K1) + ZK(K2) + ZK(K3)) / 3 IF (DEPTH .GE. .01) THEN TSIG = 5D0 CALL getwavenr(depth,tsig,rk) znetcell = SLOPE/(DEPTH*RK) else znetcell = dmiss ENDIF ENDIF ENDIF ENDIF else if ( ndraw(33)== 12 .or. ndraw(33)==13 ) then ! min, max angles call CHECKTRIANGLEnetcell(k,JA,phimin,phimax) if ( ndraw(33)== 12) then znetcell = phimin else znetcell = phimax endif endif end function znetcell SUBROUTINE NDISPLAY(NWHAT,KEY) USE M_FLOW USE M_FLOWGEOM use unstruc_display use unstruc_model, only : md_ident use unstruc_startup, only : initgui use m_physcoef, only : ifrctypuni use m_sediment use m_transport implicit none integer :: maxexp, ium integer :: maxopt integer :: ndraw integer :: nputz integer :: nwhat2, MINP integer :: NWHAT,KEY logical :: jawel character(len=255) :: filnam integer :: mfil integer :: i integer, parameter :: MAXOP = 54 COMMON /DRAWTHIS/ NDRAW(40) CHARACTER*40 OPTION(MAXOP),EXP(MAXOP) 1234 continue IF (NWHAT .EQ. 1) THEN EXP(1) = 'MENU 9 ' EXP(2) = 'DISPLAY PRESETS ' OPTION(1) = 'Network topology (nrs) ' OPTION(2) = 'Network orthogonality ' OPTION(3) = 'Flow display ' OPTION(4) = 'Load display settings ' OPTION(5) = 'Save current display settings ' MAXOPT = 5 NWHAT2 = 0 CALL MENUV3(NWHAT2,OPTION,MAXOPT,EXP,MAXEXP) IF (NWHAT2 == 1) THEN ! Network topology NDRAW(2) = 1 ! Network solid lines NDRAW(16) = 0 ! NO previous network NDRAW(19) = 2 ! MODE nodevalues as numbers NDRAW(11) = 2 ! MODE linkvalues as numbers NDRAW(7) = 2 ! netlink values: numbers NDRAW(8) = 2 ! netnode values: numbers NDRAW(28) = 1 ! NO flownode values NDRAW(29) = 1 ! NO flowlink values NDRAW(33) = 2 ! netcell values: numbers KEY = 3 ELSEIF (NWHAT2 == 2) THEN ! Network orthogonality NDRAW(2) = 1 ! Network solid lines NDRAW(16) = 0 ! NO previous network NDRAW(19) = 5 ! MODE nodevalues as dots NDRAW(11) = 5 ! MODE linkvalues as dots NDRAW(7) = 4 ! netlink values: orthogonality NDRAW(8) = 1 ! NO netnode values NDRAW(28) = 1 ! NO flownode values NDRAW(29) = 1 ! NO flowlink values NDRAW(33) = 1 ! NO netcell values KEY = 3 ELSEIF (NWHAT2 == 3) THEN ! Flow display NDRAW(2) = 1 ! Network solid lines NDRAW(16) = 0 ! NO previous network NDRAW(19) = 3 ! MODE nodevalues as isofil smooth NDRAW(11) = 5 ! MODE linkvalues as dots NDRAW(7) = 4 ! netlink values: orthogonality NDRAW(8) = 1 ! NO netnode values NDRAW(28) = 2 ! flownode values: waterlevel NDRAW(29) = 1 ! NO flowlink values NDRAW(33) = 1 ! NO netcell values KEY = 3 ELSEIF (NWHAT2 == 4) THEN ! Load display preset FILNAM = '*.cfg' MFIL = 0 CALL FILEMENU(MFIL,FILNAM) IF (MFIL .EQ. -2) THEN CALL qnerror('file' , filnam, 'not found ') ELSE IF (mfil > 0) THEN call initGUI(0) ! NO INTINI call doclose(mfil) call load_displaysettings(filnam) CALL MESSAGE('YOU LOADED ' , filnam, ' ') key = 3 end if ELSE IF (NWHAT2 .EQ. 5) THEN if (len_trim(md_ident) == 0) then FILNAM = '*.cfg' else FILNAM = trim(md_ident)//'.cfg' endif mfil = 1 CALL FILEMENU(mfil,FILNAM) IF (mfil > 0) THEN call doclose(mfil) CALL save_displaysettings(filnam) CALL MESSAGE('YOU SAVED ' , filnam, ' ') ENDIF ENDIF ELSEIF (NWHAT .EQ. 2) THEN EXP(1) = 'MENU 9 ' EXP(2) = 'HOW TO DISPLAY THE NETWORK ' OPTION(1) = 'NO NETWORK ' OPTION(2) = 'NETWORK SOLID LINES ' OPTION(3) = 'NETWORK SOLID LINES + OUTLINE ' OPTION(4) = 'NETWORK OUTLINE ONLY ' OPTION(5) = 'NETWORK + XZ,YZ ' OPTION(6) = 'NETWORK + crossings/quality checks ' OPTION(7) = 'NETWORK + on top ' MAXOPT = 7 NWHAT2 = NDRAW(2) + 1 CALL MENUV3(NWHAT2,OPTION,MAXOPT,EXP,MAXEXP) IF (NWHAT2 .GE. 1) THEN IF (NWHAT2 - 1 .NE. NDRAW(2) ) KEY = 3 NDRAW(2) = NWHAT2 - 1 if (NDRAW(2)>=2 .and. NDRAW(2)<=4) then call findcells(0) else if (NDRAW(2)==5) then call checknetwork() KEY = 3 end if ENDIF ELSE IF (NWHAT .EQ. 3) THEN EXP(1) = 'MENU 9 ' EXP(2) = 'HOW TO DISPLAY THE PREVIOUS NETWOK ' OPTION(1) = 'NO NETWORK ' OPTION(2) = 'NETWORK SOLID LINES ' OPTION(3) = 'OTHER ' OPTION(4) = 'GRID SPLINE SHAPE SOLID LINES ' OPTION(5) = 'GRID SPLINE SHAPE DOTTED LINES ' OPTION(6) = 'GRID SOLID LINES PLUS M,N COORDINATES ' MAXOPT = 6 NWHAT2 = NDRAW(16) + 1 CALL MENUV3(NWHAT2,OPTION,MAXOPT,EXP,MAXEXP) IF (NWHAT2 .GE. 1) THEN IF (NWHAT2 - 1 .NE. NDRAW(16) ) KEY = 3 NDRAW(16) = NWHAT2 - 1 ENDIF ELSE IF (NWHAT .EQ. 4) THEN EXP(1) = 'MENU 9 ' EXP(2) = 'HOW TO DISPLAY THE SPLINES ' OPTION(1) = 'No Splines ' OPTION(2) = 'Splines with Dots ' OPTION(3) = 'Splines ' MAXOPT = 3 NWHAT2 = NDRAW(15) + 1 CALL MENUV3(NWHAT2,OPTION,MAXOPT,EXP,MAXEXP) IF (NWHAT2 .GE. 1) THEN IF (NWHAT2 - 1 .NE. NDRAW(15) ) KEY = 3 NDRAW(15) = NWHAT2 - 1 ENDIF ELSE IF (NWHAT .EQ. 5) THEN EXP(1) = 'MENU 10 ' EXP(2) = 'HOW TO DISPLAY THE land boundary ' OPTION(1) = 'NO land boundary ' OPTION(2) = 'LINES ' OPTION(3) = 'LINES + DOTS ' OPTION(4) = 'LINES + NRS ' OPTION(5) = 'THICK LINES ' OPTION(6) = 'LINES, first drawing object ' OPTION(7) = 'LINES + DOTS, first drawing object ' OPTION(8) = 'LINES + NRS , first drawing object ' OPTION(9) = 'THICK LINES , first drawing object ' MAXOPT = 9 NWHAT2 = NDRAW(3) + 1 CALL MENUV3(NWHAT2,OPTION,MAXOPT,EXP,MAXEXP) IF (NWHAT2 .GE. 1) THEN IF (NWHAT2 - 1 .NE. NDRAW(3) ) KEY = 3 NDRAW(3) = NWHAT2 - 1 ENDIF ELSE IF (NWHAT .EQ. 6) THEN EXP(1) = 'MENU 8 ' EXP(2) = 'HOW TO DISPLAY NODE VALUES ' OPTION(1) = 'NO ' OPTION(2) = 'NUMBERS ' OPTION(3) = 'ISOFIL SMOOTH ' OPTION(4) = 'ISOFIL ' OPTION(5) = 'DOTS ' OPTION(6) = 'ISOFIL SMOOTH + NUMBERS ' OPTION(7) = 'ISOFIL + NUMBERS ' OPTION(8) = 'DOTS + NUMBERS ' OPTION(9) = 'highlight dots smallest 5 % ' OPTION(10)= 'highlight dots largest 5 % ' MAXOPT = 10 NWHAT2 = NDRAW(19) CALL MENUV3(NWHAT2,OPTION,MAXOPT,EXP,MAXEXP) IF (NWHAT2 .NE. NDRAW(19) ) KEY = 3 NDRAW(19) = NWHAT2 ELSE IF (NWHAT .EQ. 7) THEN EXP(1) = 'MENU 8 ' EXP(2) = 'HOW TO DISPLAY LINK VALUES ' OPTION(1) = 'NO ' OPTION(2) = 'NUMBERS ' OPTION(3) = 'ISOfil SMOOTH ' OPTION(4) = 'ISOFIL ' OPTION(5) = 'DOTS ' OPTION(6) = 'ISOLINE + NUMBERS ' OPTION(7) = 'ISOFIL + NUMBERS ' OPTION(8) = 'DOTS + NUMBERS ' OPTION(9) = 'highlight dots smallest 5 % ' OPTION(10)= 'highlight dots largest 5 % ' MAXOPT = 10 NWHAT2 = NDRAW(11) CALL MENUV3(NWHAT2,OPTION,MAXOPT,EXP,MAXEXP) IF (NWHAT2 .NE. NDRAW(11) ) KEY = 3 NDRAW(11) = NWHAT2 ELSE IF (NWHAT .EQ. 8) THEN EXP(1) = 'MENU 11 ' EXP(2) = 'SHOW NODE ADMINISTRATION ' OPTION(1) = 'NO NODE VALUES ' OPTION(2) = 'NODE NUMBERS ' OPTION(3) = 'NUMBER OF LINKS ATTACHED TO NODE ' OPTION(4) = 'LINK NUMBERS BASED ON NODES ' OPTION(5) = 'NODE CODES ' OPTION(6) = 'Vertical level ZK (m)' OPTION(7) = 'Distance to land boundary ' OPTION(8) = 'Erodable Lay. Thickn. (m)' OPTION(9) = 'Vorticity at netnodes (1/s)' OPTION(10) = 'Netnode area BAN (m2)' MAXOPT = 10 NWHAT2 = NDRAW(8) CALL MENUV3(NWHAT2,OPTION,MAXOPT,EXP,MAXEXP) IF (NWHAT2 .NE. NDRAW(8) ) KEY = 3 NDRAW(8) = NWHAT2 ! Set default display mode to numbers for nodenums/codes, etc. if (nwhat2 == 2 .or. nwhat2 == 3 .or. nwhat2 == 4 .or. nwhat2 == 5 .or. nwhat2 == 7) then ndraw(19) = 2 elseif (ndraw(19) == 2) then ! Set back to default if current is 'numbers'. ndraw(19) = 4 end if IF (NWHAT2 > 0) THEN CALL PARAMTEXT(OPTION(NWHAT2),1) ENDIF ELSE IF (NWHAT .EQ. 9) THEN EXP(1) = 'MENU 9 ' EXP(2) = 'HOW TO DISPLAY THE ELEMENT ADMIN ' OPTION(1) = 'NO LINK VALUES ( ) ' OPTION(2) = 'LINK NUMBERS ( ) ' OPTION(3) = 'NODE NUMBERS BASED ON LINKS ( ) ' OPTION(4) = 'LINK ORTHOGONALITY COSPHI ( ) ' OPTION(5) = ' ( ) ' OPTION(6) = 'LINK CODE LC, branch nr ( ) ' OPTION(7) = 'nr of links on branch ( ) ' OPTION(8) = ' ( ) ' OPTION(9) = ' ( ) ' OPTION(10)= 'LINK LENGHT ( m) ' OPTION(11)= 'LINK CODE KN(3,L) ( ) ' OPTION(12)= 'LINK, NR OF CONNECTED CELLS LNN ( ) ' OPTION(13)= 'LINK, CONNECTED CELL NR 1 LNE1( ) ' OPTION(14)= 'LINK, CONNECTED CELL NR 2 LNE2( ) ' OPTION(15)= 'decrease in topology functional ( ) ' OPTION(16)= 'smoothness indicator ( ) ' OPTION(17)= 'small flow link criterion, dx/(ba12) ( )' MAXOPT = 17 if ( jatrt.eq.1 ) then MAXOPT = 18 if (ifrctypuni == 0) then OPTION(18)= 'Roughness from trachytopes (Chezy) ' elseif (ifrctypuni == 1) then OPTION(18)= 'Roughness from trachytopes (Manning) ' elseif ((ifrctypuni == 2) .or. (ifrctypuni == 3)) then OPTION(18)= 'Roughness from trachytopes (WhitCol) ' else OPTION(18)= 'Roughness from trachytopes ( ) ' end if end if NWHAT2 = NDRAW(7) CALL MENUV3(NWHAT2,OPTION,MAXOPT,EXP,MAXEXP) IF (NWHAT2 .NE. NDRAW(7) ) KEY = 3 NDRAW(7) = NWHAT2 ! Prepare data if ( nwhat2==4 .or. nwhat2==15) then if ( .not.allocated(xz) ) then call findcells(0) end if end if ! Set default display mode to numbers for linknums/codes, etc. if (nwhat2 == 2 .or. nwhat2 == 3 .or. nwhat2 == 11 .or. nwhat2 == 12 .or. nwhat2 == 13 .or. nwhat2 == 14 .or. nwhat2 == 15) then ndraw(11) = 2 elseif (ndraw(11) == 2 .and. (nwhat2 == 4 .or. nwhat2 == 10)) then ! Set to dots for real values if current is numbers. ndraw(11) = 4 end if IF (NWHAT2 .NE. 0) THEN CALL PARAMTEXT(OPTION(NWHAT2),2) ENDIF IF (NWHAT2 == 6 .or. NWHAT2 == 7) CALL SETBRANCH_LC(ium) ELSE IF (NWHAT .EQ. 10) THEN ! flow nodes EXP(1) = 'MENU ' EXP(2) = 'SHOW flow nodes ' OPTION(1) = 'NO ' OPTION(2) = 'Waterlevel (m )' ! options for nodes , znod, ndraw(28) OPTION(3) = 'Bedlevel (m )' OPTION(4) = 'Cell area (m2)' OPTION(5) = 'Free surface area (m2)' OPTION(6) = 'Volume (m3)' OPTION(7) = 'Waterdepth (m )' OPTION(8) = 'Node velocity magnitude (m/s)' OPTION(9) = 'Node x-velocity component (m/s)' OPTION(10)= 'Node y-velocity component (m/s)' OPTION(11)= 'Salinity (ppt)' OPTION(12)= 'Temperature (degC)' OPTION(13)= 'Sediment concentration (kg/m3)' OPTION(14)= 'Froude nr ( )' OPTION(15)= 'Node nr ( )' OPTION(16)= 'Nr of links attached to this node ( )' OPTION(17)= 'Kcs ( )' OPTION(18)= 'Squ sum of q out of cell (m3/s)' OPTION(19)= 'Sqi sum of q in to cell (m3/s)' OPTION(20)= 'Sqi-squ (m3/s)' OPTION(21)= 'QW vertical interface flux (m3/s)' OPTION(22)= 'Equilibrium Transport conc. (kg/m3)' OPTION(23)= 'Qin (m3/s)' OPTION(24)= 'Erodable Lay. Thickn. (m)' OPTION(25)= 'nr of layers ( )' OPTION(26)= 'aif () ' OPTION(27)= 'vicwws (m2/s)' OPTION(28)= 'cg=red, substi=white ' OPTION(29)= 'Tidal potential (m2/s2)' OPTION(30)= 'Timestep for jaautotimestep >= 1 ( s )' OPTION(31)= 'Patm (N/m2 )' OPTION(32)= 'Numlimdt ' ! Velocity head (m )' OPTION(33)= 'Total head (m )' OPTION(34)= 'Volume error (m3 )' OPTION(35)= 'Fetchlength (m )' OPTION(36)= 'Fetchdepth (m )' OPTION(37)= 'Significant waveheight (m )' OPTION(35)= 'Rho (kg/m3)' OPTION(36)= 'cflmx*vol1(k)/squ(k) ( )' OPTION(37)= 'salmase ( )' OPTION(38)= 'Layer thickness (m )' OPTION(39)= 'Taus 2D (N/m2)' OPTION(40)= 'Rainfall (mm/min)' OPTION(41)= 'Humidity (%)' OPTION(42)= 'Air temperature (C)' OPTION(43)= 'Cloudiness (%)' OPTION(44)= 'Solar radiation (W/m2)' OPTION(45)= 'Constituents ' if( jasecf > 0 ) then OPTION(46)= 'Streamlines curvature (1/m)' OPTION(47)= 'Spiral flow intensity (m/s)' OPTION(48)= 'Spiral flow angle (rad)' OPTION(49)= 'Dispersion stress by spiral flow (m/s2)' else OPTION(46)= 'bz' OPTION(47)= 'N/A' OPTION(48)= 'N/A' OPTION(49)= 'N/A' endif !do i= 1,NUMCONST ! OPTION(40+i) = const_names(i) !end do iconst_cur = 1 if (Jawave > 0) then OPTION(50)= 'Significant waveperiod (s )' OPTION(51)= 'Taucurrent (N/m2)' OPTION(52)= 'Tauwave (N/m2)' OPTION(53)= 'Ustokes (m/s )' OPTION(54)= 'Significant wave height (m)' MAXOPT = 54 else MAXOPT = 49 endif NWHAT2 = NDRAW(28) CALL MENUV3(NWHAT2,OPTION,MAXOPT,EXP,MAXEXP) ! Set default display mode to numbers for nodenums/codes, etc. if (ndraw(19) == 1) then if (nwhat2 == 15 .or. nwhat2 == 16) then ndraw(19) = 2 else ! Set back to default if current is 'no' ndraw(19) = 4 endif end if IF (NWHAT2 > 1) THEN CALL PARAMTEXT(OPTION(NWHAT2),1) ENDIF IF (NWHAT2 .NE. NDRAW(28) ) KEY = 3 NDRAW(28) = NWHAT2 if (ndraw(28) == 24 .and. jaceneqtr == 2) then ! transfer to net node drawing ndraw(28) = 0 ndraw(8) = 8 else if ( ndraw(28).eq.45 .and. NUMCONST.gt.0 ) then if ( NUMCONST.gt.0 ) then ndraw(28) = 1 nwhat = 37 goto 1234 else ndraw(28) = 0 end if endif ELSE IF (NWHAT .EQ. 11) THEN ! flow links EXP(1) = 'MENU ' EXP(2) = 'SHOW flow links ' OPTION(1) = 'NO ' OPTION(2) = 'abs(u1) (m/s)' ! options for links, zlin, ndraw(29) OPTION(3) = 'q1-specific (m2/s)' OPTION(4) = 'q1 (m3/s)' OPTION(5) = 'au (m2)' OPTION(6) = 'hu (m)' OPTION(7) = 'user defined friction coefficient frcu ' OPTION(8) = 'dx ' OPTION(9) = 'wu ' OPTION(10)= 'bob nd1 ' OPTION(11)= 'bob nd2 ' OPTION(12)= 'kcu ' OPTION(13)= 'horizontal eddy viscosity coeff. (m2/s)' OPTION(14)= 'teta (L) ( )' OPTION(15)= ' ' OPTION(16)= 'u1 (m/s)' OPTION(17)= 'adve (m/s2)' OPTION(18)= 'advi (1/s)' OPTION(19)= 'FU ' OPTION(20)= 'RU ' OPTION(21)= 'suu (m/s2)' OPTION(22)= 'aifu () ' OPTION(23)= ' ' OPTION(24)= 'cfu=g/(HC2) ( )' OPTION(25)= 'wind x (m/s)' OPTION(26)= 'wind y (m/s)' OPTION(27)= 'windstress (N/m2)' OPTION(28)= 'cosphiu , link orthogonality ()' OPTION(29)= 'link nr ' OPTION(30)= 'tangential velocity (m/s)' OPTION(31)= 'Fu (1/s)' OPTION(32)= 'Ru (m/s)' OPTION(33)= 'iadv (m/s)' OPTION(34)= 'plotlin ( )' OPTION(35)= 'node nr 1, ln(1,L) ( )' OPTION(36)= 'node nr 2, ln(2,L) ( )' OPTION(37)= 'Vorticity ( 1/s )' OPTION(38)= 'Timestep if jaautotimestep == 2 ( s )' OPTION(39)= 'bottom slope (bl2-bl1)/dx ( )' OPTION(40)= 'IFRCUTP friction type ( )' OPTION(41)= 'turkin0 (m2/s2)' OPTION(42)= 'tureps0 (1/s )' OPTION(43)= 'vicwwu (m2/s )' OPTION(44)= 'ustb ( )' OPTION(45)= 'womegu (m/s )' OPTION(46)= 'Layer Thickness at u (m )' OPTION(47)= 'Linear friction coefficient (m/s )' MAXOPT = 47 NWHAT2 = NDRAW(29) CALL MENUV3(NWHAT2,OPTION,MAXOPT,EXP,MAXEXP) IF (NWHAT2 .NE. NDRAW(29) ) KEY = 3 ! Set default display mode to numbers for linknums, etc. if (nwhat2 == 29) then ndraw(11) = 2 end if IF (NWHAT2 > 1) THEN CALL PARAMTEXT(OPTION(NWHAT2),2) ENDIF NDRAW(29) = NWHAT2 ELSE IF (NWHAT .EQ. 12) THEN ! show values at net cell EXP(1) = 'MENU ' EXP(2) = 'SHOW net cells ' OPTION(1) = 'Do not show values at net cells ' OPTION(2) = 'Cell numbers ' OPTION(3) = 'Show aspect ratio, <=1 by definition ' OPTION(4) = 'Show orientation vectors ' OPTION(5) = 'Show aspect ratio plus vectors ' OPTION(6) = 'Show cell size (m)' OPTION(7) = 'Show cell coarsening information ' OPTION(8) = 'Show cell type: tri, quad, penta, hexa ' OPTION(9) = 'Normalised circumcentre - gravitycentre ' OPTION(10)= 'Cell slope ( )' OPTION(11)= ' ' OPTION(12)= 'Smallest angle (deg)' OPTION(13)= 'Largest angle (deg)' OPTION(14)= ' ' OPTION(15)= 'Partitioning info, domain number ' OPTION(16)= 'Partitioning info, number of cells ' OPTION(17)= 'Partitioning info, ghostlevels ' OPTION(18)= 'Partitioning info, cell-based ghostlevls' OPTION(19)= 'Partitioning info, node-based ghostlevls' OPTION(20)= 'Partitioning info, global cell number ' MAXOPT = 20 NWHAT2 = NDRAW(33) CALL MENUV3(NWHAT2,OPTION,MAXOPT,EXP,MAXEXP ) IF (NWHAT2 .NE. NDRAW(33) ) KEY = 3 NDRAW(33) = NWHAT2 IF (NWHAT2 > 1) THEN CALL PARAMTEXT(OPTION(NWHAT2),1) ENDIF ! Set default display mode if (nwhat2 == 3 .or. nwhat2 == 5) then ndraw(19) = 3 elseif ( nwhat2 == 2 .or. nwhat2 == 6 .or. nwhat2 == 7 ) then ndraw(19) = 2 elseif ( nwhat2 == 15 .or. nwhat == 16 ) then ndraw(19) = 5 end if ELSE IF (NWHAT .EQ. 13) THEN ! show values at cell corners EXP(1) = 'MENU ' EXP(2) = 'SHOW flow links ' OPTION(1) = 'Do NOt show values at flow cell corners ' OPTION(2) = 'Show x velocity comp ' OPTION(3) = 'Show y velocity comp ' OPTION(4) = 'Show velocity magnitude ' OPTION(5) = 'Show corner velocity vectors ' MAXOPT = 5 NWHAT2 = NDRAW(31) CALL MENUV3(NWHAT2,OPTION,MAXOPT,EXP,MAXEXP ) IF (NWHAT2 .NE. NDRAW(31) ) KEY = 3 NDRAW(31) = NWHAT2 ELSE IF (NWHAT .EQ. 14) THEN ! show all flow white line EXP(1) = 'MENU ' EXP(2) = 'SHOW flow links ' OPTION(1) = 'Do NOt show flow links ' OPTION(2) = 'Show All flow links ' OPTION(3) = 'Show All flow link directions ' MAXOPT = 3 NWHAT2 = NDRAW(30) CALL MENUV3(NWHAT2,OPTION,MAXOPT,EXP,MAXEXP) IF (NWHAT2 .NE. NDRAW(30) ) KEY = 3 NDRAW(30) = NWHAT2 ELSE IF (NWHAT .EQ. 15) THEN EXP(1) = 'MENU ' EXP(2) = 'SHOW vectors YES/NO ' OPTION(1) = 'NO ' OPTION(2) = 'Velocity ' OPTION(3) = 'Discharge ' OPTION(4) = 'Momentum transport ' OPTION(5) = 'Wind ' OPTION(6) = 'Wind arcuv ' OPTION(7) = 'Atmospheric pressure arc ' OPTION(8) = 'Wind spiderweb ' MAXOPT = 8 NWHAT2 = NDRAW(13) CALL MENUV3(NWHAT2,OPTION,MAXOPT,EXP,MAXEXP) IF (NWHAT2 .GE. 1) THEN NDRAW(13) = NWHAT2 ENDIF key = 3 ELSE IF (NWHAT .EQ. 16) THEN EXP(1) = 'MENU ' EXP(2) = 'SHOW observation stations ' OPTION(1) = 'NO observation stations ' OPTION(2) = 'Cross ' OPTION(3) = 'Cross + name ' OPTION(4) = 'Polyfil ' OPTION(5) = 'Polyfil + name ' OPTION(6) = 'Cross + waterlevel (m) ' OPTION(7) = 'Cross + velocity magnitudes ' MAXOPT = 7 NWHAT2 = NDRAWobs CALL MENUV3(NWHAT2,OPTION,MAXOPT,EXP,MAXEXP) IF (NWHAT2 .GE. 1) THEN IF (NWHAT2 .NE. NDRAWobs ) KEY = 3 NDRAWobs = NWHAT2 ENDIF ELSE IF (NWHAT .EQ. 17) THEN EXP(1) = 'MENU ' EXP(2) = 'SHOW CROSS SECTIONS ' OPTION(1) = 'NO cross sections ' OPTION(2) = 'Line only ' OPTION(3) = 'Line + direction ' OPTION(4) = 'Line + direction + name ' OPTION(5) = 'Line + direction + discharge (m3/s)' OPTION(6) = 'Line + direction + flow area (m2) ' OPTION(7) = 'Line + direction + ave. velocity (m/s ' OPTION(8) = 'Line + direction + ave. waterlevel (m) ' OPTION(9) = 'Line + direction + ave. head (m) ' MAXOPT = 9 NWHAT2 = ndrawcrosssections CALL MENUV3(NWHAT2,OPTION,MAXOPT,EXP,MAXEXP) IF (NWHAT2 .GE. 1) THEN IF (NWHAT2 .NE. NDRAWcrosssections) KEY = 3 NDRAWcrosssections = NWHAT2 ENDIF ELSE IF (NWHAT .EQ. 18) THEN EXP(1) = 'MENU ' EXP(2) = 'SHOW THIN DAMS YES/NO ' OPTION(1) = 'NO thin dams ' OPTION(2) = 'Thin dam polylines ' OPTION(3) = 'Thin dam net links ' MAXOPT = 3 NWHAT2 = ndrawThinDams+1 CALL MENUV3(NWHAT2,OPTION,MAXOPT,EXP,MAXEXP) ndrawThinDams = NWHAT2-1 KEY = 3 ELSE IF (NWHAT .EQ. 19) THEN EXP(1) = 'MENU ' EXP(2) = 'SHOW FIXED WEIRS YES/NO ' OPTION(1) = 'NO fixed weirs ' OPTION(2) = 'Fixed weir flow links ' OPTION(3) = 'Fixed weir flow links + heights ' OPTION(4) = 'Fixed weir flow links isocol ' OPTION(5) = 'Fixed weir flow links + heights isocol ' OPTION(6) = 'Fixed weir only if above water surface ' MAXOPT = 6 NWHAT2 = ndrawFixedWeirs+1 CALL MENUV3(NWHAT2,OPTION,MAXOPT,EXP,MAXEXP) ndrawFixedWeirs = NWHAT2-1 KEY = 3 ELSE IF (NWHAT .EQ. 20) THEN ! Lege regel ELSE IF (NWHAT .EQ. 21) THEN EXP(1) = 'MENU 12 ' EXP(2) = 'ISOSCALE YES OR NO ' OPTION(1) = 'ISOSCALE NODES ON ' OPTION(2) = 'ISOSCALE LINKS ON ' OPTION(3) = 'ISOSCALES NODES AND LINKS ON ' OPTION(4) = 'ISOSCALES OFF ' MAXOPT = 4 NWHAT2 = NDRAW(12) CALL MENUV3(NWHAT2,OPTION,MAXOPT,EXP,MAXEXP) IF (NWHAT2 .GE. 1) THEN IF (NWHAT2 .NE. NDRAW(12) ) KEY = 3 NDRAW(12) = NWHAT2 ENDIF ELSE IF (NWHAT .EQ. 22) THEN CALL SETCOLTABFILE('*.hls ',0) KEY = 3 ELSE IF (NWHAT .EQ. 23) THEN CALL CHANGEISOPARAMETERS() KEY = 3 ELSE IF (NWHAT .EQ. 24) THEN CALL CHANGEDISPLAYPARAMETERS() KEY = 3 ELSE IF (NWHAT .EQ. 25) THEN CALL TEXTPARAMETERS() KEY = 3 ELSE IF (NWHAT .EQ. 26) THEN ! Lege regel ELSE IF (NWHAT .EQ. 27) THEN KEY = 90 inquire (file = trim(md_ident)//'.x1y1x2' , exist = jawel ) if (jawel) then call oldfil(minp, trim(md_ident)//'.x1y1x2') read (minp,*) x1,y1,x2 call doclose(minp) call setwy(x1,y1,x2,y2) key = 3 else NPUTZ = 2 CALL ZOOM3(KEY,NPUTZ) endif ELSE IF (NWHAT .EQ. 28) THEN KEY = 3 ELSE IF (NWHAT .EQ. 29) THEN NDRAW(10) = 1 KEY = 3 ELSE IF (NWHAT .EQ. 30) THEN EXP(1) = 'MENU ' EXP(2) = 'SHOW ORTHO YES/NO ' OPTION(1) = 'NO rai ' OPTION(2) = 'small rai ' OPTION(3) = 'somewhat larger rai ' OPTION(4) = 'larger rai ' OPTION(5) = 'velocity prof ' MAXOPT = 5 NWHAT2 = NDRAW(18) CALL MENUV3(NWHAT2,OPTION,MAXOPT,EXP,MAXEXP) NDRAW(18) = NWHAT2 KEY = 3 ELSE IF (NWHAT .EQ. 31) THEN NDRAW(9) = 2 KEY = 3 ELSE IF (NWHAT .EQ. 32) THEN EXP(1) = 'MENU 9 ' EXP(2) = 'HOW TO DISPLAY SAMPLE POINTS ' OPTION(1) = 'NO SAMPLE POINTS ' OPTION(2) = 'COLOURED DOTS ' OPTION(3) = 'COLOURED DOTS AND CIRCLES ' OPTION(4) = 'SMALL POINTS ' OPTION(5) = 'NUMBERS ISOCOLOUR ' OPTION(6) = 'NUMBERS MONOCOLOUR ' OPTION(7) = 'NUMBERS ISOCOLOUR + COLOURED DOTS ' OPTION(8) = 'COLOURED SQUARES ' MAXOPT = 8 NWHAT2 = max(0,NDRAW(32)) + 1 CALL MENUV3(NWHAT2,OPTION,MAXOPT,EXP,MAXEXP) IF (NWHAT2 .GE. 1) THEN IF (NWHAT2 - 1 .NE. NDRAW(32) ) KEY = 3 NDRAW(32) = NWHAT2 - 1 ENDIF ELSE IF (NWHAT .EQ. 33) THEN EXP(1) = 'MENU ' EXP(2) = 'SHOW ORTHO YES/NO ' OPTION(1) = 'YO BITMAP ' OPTION(2) = 'NO BITMAP ' MAXOPT = 2 NWHAT2 = NDRAW(26) CALL MENUV3(NWHAT2,OPTION,MAXOPT,EXP,MAXEXP) NDRAW(26) = NWHAT2 KEY = 3 ELSE IF (NWHAT .EQ. 34) THEN EXP(1) = 'MENU ' EXP(2) = 'SHOW ORTHO YES/NO ' OPTION(1) = 'No Banf ' OPTION(2) = 'Equilibrium concentration ' OPTION(3) = 'Banf flux (ceq - c) ' OPTION(4) = 'Netnode nr ' OPTION(5) = 'Flownode nr ' OPTION(6) = 'Ban nr ' MAXOPT = 6 NWHAT2 = NDRAW(34) CALL MENUV3(NWHAT2,OPTION,MAXOPT,EXP,MAXEXP) NDRAW(34) = NWHAT2 KEY = 3 ELSE IF (NWHAT .EQ. 35) THEN EXP(1) = 'MENU ' EXP(2) = 'SHOW ORTHO YES/NO ' OPTION(1) = 'No Polygon ' OPTION(2) = 'Polygon red + white dots ' OPTION(3) = 'Polygon isocolour ZPL values ' OPTION(4) = 'Polygon + numbers ZPL values ' OPTION(5) = 'Polygon + numbers Left Sillheights ' OPTION(6) = 'Polygon + numbers Right Sillheights ' OPTION(7) = 'Polygon isocolour Left/Right levels ' OPTION(8) = 'Polygon index nrs ' MAXOPT = 8 NWHAT2 = NDRAWPOL CALL MENUV3(NWHAT2,OPTION,MAXOPT,EXP,MAXEXP) NDRAWPOL = NWHAT2 KEY = 3 ELSE IF (NWHAT .EQ. 36) THEN EXP(1) = 'MENU ' EXP(2) = 'SHOW ORTHO YES/NO ' OPTION(1) = 'No curvilinear grid ' OPTION(2) = 'Lines ' OPTION(3) = ' ' OPTION(4) = ' ' OPTION(5) = 'Nr of netcells in gridcells (partition).' MAXOPT = 5 NWHAT2 = NDRAW(38) CALL MENUV3(NWHAT2,OPTION,MAXOPT,EXP,MAXEXP) NDRAW(38) = NWHAT2 if (ndraw(38) == 5) then call teknumnetcells(1) endif KEY = 3 ELSE IF (NWHAT .EQ. 37) THEN ! constituents EXP(1) = 'MENU ' EXP(2) = 'SHOW CONSTITUENTS YES/NO ' OPTION(1) = 'NEW TRACER ' do i=1,NUMCONST OPTION(i+1)=const_names(i) end do MAXOPT = 1+NUMCONST NWHAT2 = NDRAW(28) CALL MENUV3(NWHAT2,OPTION,MAXOPT,EXP,MAXEXP) NDRAW(28) = NWHAT2 KEY = 3 iconst_cur = max(nwhat2-1,0) IF (NWHAT2 == 1) THEN ! new tracer call add_tracer('', iconst_cur) nwhat2 = iconst_cur+1 option(nwhat2) = const_names(iconst_cur) ENDIF NDRAW(28) = 45 if ( nwhat2.gt.0 ) then CALL PARAMTEXT(option(nwhat2),1) end if ENDIF RETURN END SUBROUTINE NDISPLAY SUBROUTINE changenetworkPARAMETERS() use m_netw use unstruc_display USE M_TRIANGLE use m_missing use unstruc_version_module, only : unstruc_company, unstruc_program implicit none integer :: i integer :: ifexit integer :: ifinit integer :: ih integer :: il integer :: imp integer :: inp integer :: ir integer :: iw integer :: ixp integer :: iyp integer :: key integer :: nbut integer :: nlevel integer :: numfldactual integer :: numparactual integer :: jins_old ! netcell administration out of date if jins changes integer, parameter :: NUMPAR = 18, NUMFLD = 2*NUMPAR INTEGER IX(NUMFLD),IY(NUMFLD),IS(NUMFLD),IT(NUMFLD) CHARACTER WRDKEY*40, OPTION(NUMPAR)*40, HELPM(NUMPAR)*60 COMMON /HELPNOW/ WRDKEY,NLEVEL integer, external :: infoinput external :: highlight_form_line jins_old = jins NLEVEL = 4 OPTION(1) = 'SELECT INSIDE POLYGON (1/0), 1 = INSIDE ' ; IT( 1*2) = 2 OPTION(2) = 'TRIANGLEMINANGLE ' ; IT( 2*2) = 6 OPTION(3) = 'TRIANGLEMAXANGLE ' ; IT( 3*2) = 6 OPTION(4) = 'TRIANGLESIZEFACTOR, MAX.INSIDE/ AV.EDGE ' ; IT( 4*2) = 6 OPTION(5) = 'limit center; 1.0:in cell <-> 0.0:on c/g' ; IT( 5*2) = 6 OPTION(6 )= 'cosphiutrsh in geominit (good orhto) ' ; IT( 6*2) = 6 OPTION(7 )= 'remove small links 0.0-> ' ; IT( 7*2) = 6 OPTION(8 )= 'TIME CONSUMING NETWORK CHECKS YES/NO 1/0' ; IT( 8*2) = 2 OPTION(9 )= 'NR OF SMOOTH. ITER. IN COURANT NETWORK ' ; IT( 9*2) = 2 OPTION(10)= 'SMALLEST CELLSIZE IN COURANT NETWORK ' ; IT(10*2) = 6 OPTION(11)= 'REMOVE SMALL TRIANGLES, TRIAREAREMFRAC ' ; IT(11*2) = 6 OPTION(12)= 'REFINE NETWORK (QUADS) DIRECTION: 0,-1,1' ; IT(12*2) = 2 OPTION(13)= 'Merge nodes closer than tooclose (m) ' ; IT(13*2) = 6 OPTION(14)= 'Connect 1D end nodes to branch if closer' ; IT(14*2) = 6 OPTION(15)= 'Uniform DX in copy landb to 1D netw ' ; IT(15*2) = 6 OPTION(16)= 'snap-to-landbdy tolerance, netboundary ' ; IT(16*2) = 6 OPTION(17)= 'snap-to-landbdy tolerance, inner network' ; IT(17*2) = 6 OPTION(18)= 'max nr of faces allowed in removesmallfl' ; IT(18*2) = 2 ! 123456789012345678901234567890123456789012345678901234567890 ! 1 2 3 4 5 6 HELPM (1) = & '1=inside, 0 = outside polygon (TO BE RESET AFTER USE) ' HELPM (2) = & ' ' HELPM (3) = & ' ' HELPM (4) = & 'MAX. INSIDE TRIANGLE SIZE / AVERAGE SIZE ON POLYGON ' HELPM (5 )= & ' ' ! 'in geominit, 1.0=inside, on edge , 0.9=inside close to edge' HELPM (6) = & 'No flow model created if cosphiu > cosphiutrsh ' HELPM (7 )= & '0.0 = remove no links, 0.1=remove links < 0.1 sqrt(baL+baR) ' HELPM (8 )= & ' ' HELPM (9 )= & 'NR OF SMOOTH. ITERATIONS IN COURANT NETWORK, SAMPLES RQUIRED' HELPM (10)= & 'SMALLEST CELLSIZE IN COURANT NETWORK, SAMPLES REQUIRED ' HELPM (11)= & 'SMALL TRIANGLE REMOVED IF TRIAREA < AV. ADJACENT AREAS ' HELPM (12)= & '0=BOTH DIRECTIONS, -1 = ONLY THIS, 1 = ONLY THAT ' HELPM (13)= & 'Used in merge nodes on top of each other ' HELPM (14)= & 'than xx (m) to branch node, used in mergenodesontop ' HELPM (15)= & 'used in copylandboundaryto1Dnetwork ' HELPM (16)= & 'tolerance in snap-to-landbdy, netboundary only (meshwidths) ' HELPM (17)= & 'tolerance in snap-to-landbdy, inner network (meshwidths) ' HELPM (18)= & 'max nr of faces allowed in removesmallflowlinks ' CALL SAVEKEYS() NUMPARACTUAL = NUMPAR NUMFLDACTUAL = 2*NUMPARACTUAL IR = 0 DO I = 1,NUMPARACTUAL IL = IR + 1 ; IR = IL + 1 IS(IL) = 82 ; IS(IR) = 10 IX(IL) = 10 ; IX(IR) = 92 IY(IL) = 2*I ; IY(IR) = 2*I IT(IL) = 1001 ! ir staat hierboven ENDDO ! Initialise CALL IWinWordWrap('OFF') CALL ITEXTCOLOURN(HLPFOR, HLPBCK) CALL INHIGHLIGHT('WHITE','RED') IW = NPOS(3) IXP = NPOS(1) + (IWS-IW)/2 IYP = NPOS(2) IH = IHS - 9 ! Header of filewindow CALL IWinAction('FPC') CALL IWinOpen(IXP,IYP,IW,1) CALL ITEXTCOLOURN(LBLFOR,LBLBCK) CALL IWinOutCentre(1,trim(unstruc_company)//'-'//trim(unstruc_program)// ' PARAMETER FORM') CALL ITEXTCOLOURN(HLPFOR,HLPBCK) ! Explain keyfunctions in bottom window CALL IWinAction('FPC') CALL IWinOpen(IXP,IHS-1,IW,2) CALL IWinOutStringXY(1,1,'move = , Tab, confirm = Enter, no change = Esc, help = F3') CALL IWinOutStringXY(1,2,'right mouse = Enter, click outside window = Esc') ! Filewindow is middelste window CALL IWinAction('FPC') CALL IWinOpen(IXP,IYP+3,IW,IH) CALL InControlKey(29,129) CALL InControlKey(30,128) ! Define a new form by supplying arrays containing Field positions, sizes and types CALL IFORMDEFINE('W',NUMFLDACTUAL,IX,IY,IS,IT) ! Define a help field and define help strings for 2 of the 4 input fields CALL IFORMHELP(13,IH,60) IR = 0 DO I = 1,NUMPARACTUAL IL = IR + 1 IR = IL + 1 CALL IFORMPUTSTRING (IL,OPTION(I)) CALL IFORMPUTHELP (IR,HELPM(I)) CALL IFORMATTRIBUTEN(IR,0,0,7) ENDDO CALL IFORMpuTINTEGER (2*1 , jins ) CALL IFormputDouble (2*2 , TRIANGLEMINANGLE , '(F7.3)') CALL IFormputDouble (2*3 , TRIANGLEMAXANGLE , '(F7.3)') CALL IFormputDouble (2*4 , TRIANGLESIZEFAC , '(F7.3)') CALL IFormputDouble (2*5 , dcenterinside, '(F7.3)') CALL IFormputDouble (2*6 , cosphiutrsh , '(F7.3)') CALL IFormputDouble (2*7 , removesmalllinkstrsh, '(F7.3)') CALL IFORMpuTINTEGER (2*8 , JOCHECKNET) CALL IFORMpuTINTEGER (2*9 , NUMITCOURANT) CALL IFormputDouble (2*10, SMALLESTSIZEINCOURANT,'(F7.0)') CALL IFormputDouble (2*11, TRIAREAREMFRAC ,'(F7.3)') CALL IFORMpuTINTEGER (2*12, M13QUAD) CALL IFormputDouble (2*13, Tooclose ,'(F7.3)') CALL IFormputDouble (2*14, CONNECT1DEND ,'(F7.3)') CALL IFormputDouble (2*15, Unidx1D ,'(F7.3)') CALL IFormputDouble (2*16, DCLOSE_bound ,'(F7.3)') CALL IFormputDouble (2*17, DCLOSE_whole ,'(F7.3)') CALL IFormputinteger (2*18, maxfaceallow) ! Display the form with numeric fields left justified and set the initial field to number 2 CALL IOUTJUSTIFYNUM('L') IFEXIT = 2 call IFormAttribute(IFEXIT-1, 'BU', ' ', ' ') CALL IFORMSHOW() 30 CONTINUE IFINIT = IFEXIT CALL IFormEditUser(IFINIT, IFEXIT, highlight_form_line) ! check for Help, Confirm, Quit KEY = INFOINPUT(55) IF (KEY .EQ. -2) THEN NBUT = INFOINPUT(61) IF (NBUT .GE. 1) THEN IMP = INFOINPUT(62) + 1 INP = INFOINPUT(63) + 1 IF (IMP .GE. IXP .AND. IMP .LT. IXP+IW .AND. & INP .GE. IYP+3 .AND. INP .LT. IYP+IH+3+2 ) THEN IF (NBUT .EQ. 1) THEN KEY = 21 ELSE KEY = 22 ENDIF ELSE KEY = 23 ENDIF ENDIF ELSE IF (KEY .EQ. -1) THEN KEY = INFOINPUT(57) ENDIF IF (KEY .EQ. 26) THEN WRDKEY = OPTION(IFEXIT/2) CALL HELP(WRDKEY,NLEVEL) ELSE IF (KEY .EQ. 22 .OR. KEY .EQ. 23) THEN IF (KEY .EQ. 22) THEN ! netcell administration out of date if jins changes CALL IFORMGETINTEGER (2*1 , jins ) if ( jins.ne.jins_old ) netstat = NETSTAT_CELLS_DIRTY jins_old = jins CALL IFormGetDouble (2*2 , TRIANGLEMINANGLE) CALL IFormGetDouble (2*3 , TRIANGLEMAXANGLE) CALL IFormGetDouble (2*4 , TRIANGLESIZEFAC) CALL IFormGetDouble (2*5 , dcenterinside) CALL IFormgetDouble (2*6 , cosphiutrsh ) CALL IFormGetDouble (2*7 , removesmalllinkstrsh) CALL IFORMGETINTEGER (2*8 , JOCHECKNET) CALL IFORMGETINTEGER (2*9 , NUMITCOURANT) CALL IFormGetDouble (2*10, SMALLESTSIZEINCOURANT) CALL IFormGetDouble (2*11, TRIAREAREMFRAC) CALL IFORMGETINTEGER (2*12, M13QUAD) CALL IFormGetDouble (2*13, Tooclose) CALL IFormGetDouble (2*14, CONNECT1DEND) CALL IFormGetDouble (2*15, Unidx1D) CALL IFormGetDouble (2*16, DCLOSE_BOUND) CALL IFormGetDouble (2*17, DCLOSE_WHOLE) CALL IFormGetinteger (2*18, maxfaceallow) ENDIF CALL IWinClose(1) CALL IWinClose(1) CALL IWinClose(1) CALL RESTOREKEYS() RETURN ELSE IF (KEY .EQ. 21) THEN IF (IFEXIT .EQ. 1 .OR. IFEXIT .EQ. 3) THEN WRDKEY = HELPM(IFEXIT) CALL HELP(WRDKEY,NLEVEL) ENDIF ENDIF GOTO 30 END SUBROUTINE changenetworkPARAMETERS SUBROUTINE changeorthoPARAMETERS() use m_orthosettings use unstruc_display use m_missing use m_netw use unstruc_version_module, only : unstruc_company, unstruc_program implicit none integer :: i integer :: ifexit integer :: ifinit integer :: ih integer :: il integer :: imp integer :: inp integer :: ir integer :: iw integer :: ixp integer :: iyp integer :: key integer :: nbut integer :: nlevel integer :: numfldactual integer :: numparactual integer, parameter :: NUMPAR = 15, NUMFLD = 2*NUMPAR INTEGER IX(NUMFLD),IY(NUMFLD),IS(NUMFLD),IT(NUMFLD) CHARACTER WRDKEY*40, OPTION(NUMPAR)*82, HELPM(NUMPAR)*102 COMMON /HELPNOW/ WRDKEY,NLEVEL integer, external :: infoinput external :: highlight_form_line NLEVEL = 4 OPTION(1) = 'ITERATIONS ORTHOGONALISE, ATTRACT. PARAM' ; IT( 1*2) = 2 OPTION(2) = 'ITERATIONS ORTHOGONALISE, BOUNDARY ' ; IT( 2*2) = 2 OPTION(3) = 'ITERATIONS ORTHOGONALISE, INNER AREA ' ; IT( 3*2) = 2 OPTION(4) = 'ORTHOGONALISE <-> SMOOTH; 1.0<->0.0' ; IT( 4*2) = 6 OPTION(5) = 'minimum ortho<->smooth on bdy; 1.0<->0.0' ; IT( 5*2) = 6 OPTION(6) = 'circumormasscenter; 1.0<->0.0' ; IT( 6*2) = 6 OPTION(7) = 'smoother <-> area homogenizer; 1.0<->0.0' ; IT( 7*2) = 6 OPTION(8) = 'project to (land)boundary ' ; IT( 8*2) = 2 OPTION(9) = 'cornernode cosine threshold ' ; IT( 9*2) = 6 OPTION(10)= 'mesh-adaptation method ' ; IT(10*2) = 2 OPTION(11)= 'mesh-refinement factor; 0.0<->1.0' ; IT(11*2) = 6 OPTION(12)= 'smooth. iters. ''solution'' in adapt.' ; IT(12*2) = 2 OPTION(13)= 'smooth. iters. monitor mat. in adapt.' ; IT(13*2) = 2 OPTION(14)= 'curvi-like <-> pure ortho; 0.0<->1.0' ; IT(14*2) = 6 OPTION(15)= 'keep circumcenters (1) or not (0) ' ; IT(15*2) = 2 ! 123456789012345678901234567890123456789012345678901234567890 ! 1 2 3 4 5 6 HELPM (1) = & 'Nr. of outer iterations in orthogonalise ' HELPM (2) = & 'Nr. of boundary iterations in orthogonalise = ITATP*ITBN ' HELPM (3) = & 'Nr. of inner iterations in orthogonalise = ITATP*ITBND*ITIN ' HELPM (4) = & 'Balance between orthogonalisation and Laplacian smoothing ' HELPM (5) = & 'Minimum balance between orthogonalisation and Laplacian smoothing on the boundary' HELPM (6) = & 'CIRCUMCENTER = 1, MASSCENTER = 0 ' HELPM (7) = & 'Balance between smoothing and cell-area homogenization ' HELPM (8) = & '0:no, 1:to orig. netbdy, 2:netbound to landbound 3:''2''+inner net to landbound 4:whole net' HELPM (9) = & 'corner if cosine of boundary edge angle < -threshold ' HELPM (10)= & '0: Winslow; 1: arc-length; 2: harmonic map ' HELPM (11)= & 'Concentration of mesh in refined region ' HELPM (12) = & 'Number of smoothing iterations of ''solution'' u in adapt. ' HELPM (13) = & 'Number of smoothing iterations of monitor matrix G in adapt.' HELPM (14) = & 'Pure orthogonalisation versus curvi-grid-like orth. in quads' HELPM (15)= & 'keep circumcenters (1) or not (0) ' CALL SAVEKEYS() NUMPARACTUAL = NUMPAR NUMFLDACTUAL = 2*NUMPARACTUAL IR = 0 DO I = 1,NUMPARACTUAL IL = IR + 1 ; IR = IL + 1 IS(IL) = 82 ; IS(IR) = 10 IX(IL) = 10 ; IX(IR) = 92 IY(IL) = 2*I ; IY(IR) = 2*I IT(IL) = 1001 ! ir staat hierboven ENDDO ! Initialise CALL IWinWordWrap('OFF') CALL ITEXTCOLOURN(HLPFOR, HLPBCK) CALL INHIGHLIGHT('WHITE','RED') IW = NPOS(3) IXP = NPOS(1) + (IWS-IW)/2 IYP = NPOS(2) IH = IHS - 9 ! Header of filewindow CALL IWinAction('FPC') CALL IWinOpen(IXP,IYP,IW,1) CALL ITEXTCOLOURN(LBLFOR,LBLBCK) CALL IWinOutCentre(1,trim(unstruc_company)//'-'//trim(unstruc_program)// ' PARAMETER FORM') CALL ITEXTCOLOURN(HLPFOR,HLPBCK) ! Explain keyfunctions in bottom window CALL IWinAction('FPC') CALL IWinOpen(IXP,IHS-1,IW,2) CALL IWinOutStringXY(1,1,'move = , Tab, confirm = Enter, no change = Esc, help = F3') CALL IWinOutStringXY(1,2,'right mouse = Enter, click outside window = Esc') ! Filewindow is middelste window CALL IWinAction('FPC') CALL IWinOpen(IXP,IYP+3,IW,IH) CALL InControlKey(29,129) CALL InControlKey(30,128) ! Define a new form by supplying arrays containing Field positions, sizes and types CALL IFORMDEFINE('W',NUMFLDACTUAL,IX,IY,IS,IT) ! Define a help field and define help strings for 2 of the 4 input fields ! CALL IFORMHELP(13,IH,60) CALL IFORMHELP(13,IH,102) IR = 0 DO I = 1,NUMPARACTUAL IL = IR + 1 IR = IL + 1 CALL IFORMPUTSTRING (IL,OPTION(I)) CALL IFORMPUTHELP (IR,HELPM(I)) CALL IFORMATTRIBUTEN(IR,0,0,7) ENDDO CALL IFORMpuTINTEGER (2*1 , ITATP) CALL IFORMpuTINTEGER (2*2 , ITBND) CALL IFORMpuTINTEGER (2*3 , ITIN) CALL IFormputDouble (2*4 , ATPF, '(F7.3)') CALL IFormputDouble (2*5 , ATPF_B, '(F7.3)') CALL IFormputDouble (2*6 , CIRCUMORMASSCENTER, '(F7.3)') CALL IFORMputDouble (2*7 , SMOOTHORAREA, '(F7.3)') CALL IFORMpuTINTEGER (2*8 , JAPROJECT) CALL IFORMpuTDouble (2*9 , CORNERCOS, '(F7.3)') CALL IFORMpuTINTEGER (2*10, ADAPT_METHOD) CALL IFORMputDouble (2*11, ADAPT_BETA, '(F7.3)') CALL IFORMpuTINTEGER (2*12, ADAPT_NITER_U) CALL IFORMpuTINTEGER (2*13, ADAPT_NITER_G) CALL IFORMputDouble (2*14, ORTHO_PURE, '(F7.3)') CALL IFormputINTEGER (2*15, keepcircumcenters ) ! Display the form with numeric fields left justified and set the initial field to number 2 CALL IOUTJUSTIFYNUM('L') IFEXIT = 2 call IFormAttribute(IFEXIT-1, 'BU', ' ', ' ') CALL IFORMSHOW() 30 CONTINUE IFINIT = IFEXIT CALL IFormEditUser(IFINIT, IFEXIT, highlight_form_line) ! check for Help, Confirm, Quit KEY = INFOINPUT(55) IF (KEY .EQ. -2) THEN NBUT = INFOINPUT(61) IF (NBUT .GE. 1) THEN IMP = INFOINPUT(62) + 1 INP = INFOINPUT(63) + 1 IF (IMP .GE. IXP .AND. IMP .LT. IXP+IW .AND. & INP .GE. IYP+3 .AND. INP .LT. IYP+IH+3+2 ) THEN IF (NBUT .EQ. 1) THEN KEY = 21 ELSE KEY = 22 ENDIF ELSE KEY = 23 ENDIF ENDIF ELSE IF (KEY .EQ. -1) THEN KEY = INFOINPUT(57) ENDIF IF (KEY .EQ. 26) THEN WRDKEY = OPTION(IFEXIT/2) CALL HELP(WRDKEY,NLEVEL) ELSE IF (KEY .EQ. 22 .OR. KEY .EQ. 23) THEN IF (KEY .EQ. 22) THEN CALL IFORMGETINTEGER (2*1 , ITATP) CALL IFORMGETINTEGER (2*2 , ITBND) CALL IFORMGETINTEGER (2*3 , ITIN) CALL IFormGetDouble (2*4 , ATPF) CALL IFormGetDouble (2*5, ATPF_B) CALL IFormGETDouble (2*6 , CIRCUMORMASSCENTER) CALL IFORMGETDouble (2*7 , SMOOTHORAREA) CALL IFORMGETINTEGER (2*8 , JAPROJECT) CALL IFORMGETDOUBLE (2*9 , CORNERCOS) CALL IFORMGETINTEGER (2*10, ADAPT_METHOD) CALL IFORMGETDouble (2*11, ADAPT_BETA) CALL IFORMGETINTEGER (2*12, ADAPT_NITER_U) CALL IFORMGETINTEGER (2*13, ADAPT_NITER_G) CALL IFORMGETDouble (2*14, ORTHO_PURE) CALL IFormGetInteger (2*15, keepcircumcenters) ENDIF CALL IWinClose(1) CALL IWinClose(1) CALL IWinClose(1) CALL RESTOREKEYS() RETURN ELSE IF (KEY .EQ. 21) THEN IF (IFEXIT .EQ. 1 .OR. IFEXIT .EQ. 3) THEN WRDKEY = HELPM(IFEXIT) CALL HELP(WRDKEY,NLEVEL) ENDIF ENDIF GOTO 30 END SUBROUTINE changeorthoPARAMETERS SUBROUTINE MAKENETPARAMETERS() USE M_MAKENET use unstruc_display use unstruc_version_module, only : unstruc_company, unstruc_program implicit none integer :: i integer :: ifexit integer :: ifinit integer :: ih integer :: il integer :: imp integer :: inp integer :: ir integer :: iw integer :: ixp integer :: iyp integer :: key integer :: nbut integer :: nlevel integer :: numfldactual integer :: numparactual integer, parameter :: NUMPAR = 13, NUMFLD = 2*NUMPAR INTEGER IX(NUMFLD),IY(NUMFLD),IS(NUMFLD),IT(NUMFLD) CHARACTER WRDKEY*40, OPTION(NUMPAR)*40, HELPM(NUMPAR)*60 COMMON /HELPNOW/ WRDKEY,NLEVEL integer, external :: infoinput external :: highlight_form_line NLEVEL = 4 OPTION(1) = 'MAZE TYPE: SQUARE, WIEBER, HEX, TRI ( )' ; IT(1*2) = 2 OPTION(2) = 'NR OF MAZES X ( )' ; IT(2*2) = 2 OPTION(3) = 'NR OF MAZES Y ( )' ; IT(3*2) = 2 OPTION(4) = 'MAZE ANGLE 1-90 (deg)' ; IT(4*2) = 6 OPTION(5) = 'MAZE SIZE (m)' ; IT(5*2) = 6 OPTION(6) = 'LINE THICKNESS (mm)' ; IT(6*2) = 6 OPTION(7) = 'ORIGIN X (m)' ; IT(7*2) = 6 OPTION(8) = 'ORIGIN Y (m)' ; IT(8*2) = 6 OPTION(9) = 'ORIGIN Z (m)' ; IT(9*2) = 6 OPTION(10)= 'DX (FOR TYPE 0 ONLY) (m)' ; IT(10*2) = 6 OPTION(11)= 'DY (FOR TYPE 0 ONLY) (m)' ; IT(11*2) = 6 OPTION(12)= ' ' ; IT(12*2) = 1001 OPTION(13)= 'MAZE SIZE HORIZONTAL PART HEXAGON (cm)' ; IT(13*2) = 6 ! 123456789012345678901234567890123456789012345678901234567890 ! 1 2 3 4 5 6 HELPM (1) = & 'SQUARE = 0, WIEBER = 1, HEX1 = 2, HEX2 = 3, TRIANGLE = 4 ' HELPM (2) = & ' ' HELPM (3) = & ' ' HELPM (4) = & ' ' HELPM (5) = & ' ' HELPM (6) = & ' ' HELPM (6) = & ' ' HELPM (7) = & ' ' HELPM (8) = & ' ' HELPM (9) = & ' ' HELPM (10)= & ' ' HELPM (11)= & ' ' HELPM (12)= & ' ' HELPM (13)= & 'ONLY VALID FOR MAZE TYPE = 2, HEXAGON ' CALL SAVEKEYS() NUMPARACTUAL = NUMPAR NUMFLDACTUAL = 2*NUMPARACTUAL IR = 0 DO I = 1,NUMPARACTUAL IL = IR + 1 ; IR = IL + 1 IS(IL) = 82 ; IS(IR) = 10 IX(IL) = 10 ; IX(IR) = 100 IY(IL) = 2*I ; IY(IR) = 2*I IT(IL) = 1001 ! ir staat hierboven ENDDO ! Initialise CALL IWinWordWrap('OFF') CALL ITEXTCOLOURN(HLPFOR, HLPBCK) CALL INHIGHLIGHT('WHITE','RED') IW = NPOS(3) IXP = NPOS(1) + (IWS-IW)/2 IYP = NPOS(2) IH = IHS - 9 ! Header of filewindow CALL IWinAction('FPC') CALL IWinOpen(IXP,IYP,IW,1) CALL ITEXTCOLOURN(LBLFOR,LBLBCK) CALL IWinOutCentre(1,trim(unstruc_company)//'-'//trim(unstruc_program)// ' PARAMETER FORM') CALL ITEXTCOLOURN(HLPFOR,HLPBCK) ! Explain keyfunctions in bottom window CALL IWinAction('FPC') CALL IWinOpen(IXP,IHS-1,IW,2) CALL IWinOutStringXY(1,1,'move = , Tab, confirm = Enter, no change = Esc, help = F3') CALL IWinOutStringXY(1,2,'right mouse = Enter, click outside window = Esc') ! Filewindow is middelste window CALL IWinAction('FPC') CALL IWinOpen(IXP,IYP+3,IW,IH) CALL InControlKey(29,129) CALL InControlKey(30,128) ! Define a new form by supplying arrays containing Field positions, sizes and types CALL IFORMDEFINE('W',NUMFLDACTUAL,IX,IY,IS,IT) ! Define a help field and define help strings for 2 of the 4 input fields CALL IFORMHELP(13,IH,60) IR = 0 DO I = 1,NUMPARACTUAL IL = IR + 1 IR = IL + 1 CALL IFORMPUTSTRING (IL,OPTION(I)) CALL IFORMPUTHELP (IR,HELPM(I)) CALL IFORMATTRIBUTEN(IR,0,0,7) ENDDO CALL IFORMPUTINTEGER (2*1, NTYP ) CALL IFORMPUTINTEGER (2*2, NRX ) CALL IFORMPUTINTEGER (2*3, NRY ) CALL IFormPutDouble (2*4, ANGLE, '(F7.3)') CALL IFormPutDouble (2*5, SIZE, '(F7.3)') CALL IFormPutDouble (2*6, THICK, '(F7.3)') CALL IFormPutDouble (2*7, X0 , '(F7.3)') CALL IFormPutDouble (2*8, Y0 , '(F7.3)') CALL IFormPutDouble (2*9, Z0 , '(F7.3)') CALL IFormPutDouble (2*10,DX0 , '(F7.3)') CALL IFormPutDouble (2*11,DY0 , '(F7.3)') CALL IFormPutDouble (2*13,HSIZE, '(F7.3)') ! Display the form with numeric fields left justified and set the initial field to number 2 CALL IOUTJUSTIFYNUM('L') IFEXIT = 2 call IFormAttribute(IFEXIT-1, 'BU', ' ', ' ') CALL IFORMSHOW() 30 CONTINUE IFINIT = IFEXIT CALL IFormEditUser(IFINIT, IFEXIT, highlight_form_line) ! check for Help, Confirm, Quit KEY = INFOINPUT(55) IF (KEY .EQ. -2) THEN NBUT = INFOINPUT(61) IF (NBUT .GE. 1) THEN IMP = INFOINPUT(62) + 1 INP = INFOINPUT(63) + 1 IF (IMP .GE. IXP .AND. IMP .LT. IXP+IW .AND. & INP .GE. IYP+3 .AND. INP .LT. IYP+IH+3+2 ) THEN IF (NBUT .EQ. 1) THEN KEY = 21 ELSE KEY = 22 ENDIF ELSE KEY = 23 ENDIF ENDIF ELSE IF (KEY .EQ. -1) THEN KEY = INFOINPUT(57) ENDIF IF (KEY .EQ. 26) THEN WRDKEY = OPTION(IFEXIT/2) CALL HELP(WRDKEY,NLEVEL) ELSE IF (KEY .EQ. 22 .OR. KEY .EQ. 23) THEN IF (KEY .EQ. 22) THEN CALL IFORMGETINTEGER (2*1 , NTYP ) CALL IFORMGETINTEGER (2*2 , NRX ) CALL IFORMGETINTEGER (2*3 , NRY ) CALL IFormGetDouble (2*4 , ANGLE) CALL IFormGetDouble (2*5 , SIZE ) CALL IFormGetDouble (2*6 , THICK) CALL IFormGetDouble (2*7 , X0 ) CALL IFormGetDouble (2*8 , Y0 ) CALL IFormGetDouble (2*9 , Z0 ) CALL IFormGetDouble (2*10, DX0 ) CALL IFormGetDouble (2*11, DY0 ) CALL IFormGetDouble (2*13, HSIZE) ENDIF CALL IWinClose(1) CALL IWinClose(1) CALL IWinClose(1) CALL RESTOREKEYS() RETURN ELSE IF (KEY .EQ. 21) THEN IF (IFEXIT .EQ. 1 .OR. IFEXIT .EQ. 3) THEN WRDKEY = HELPM(IFEXIT) CALL HELP(WRDKEY,NLEVEL) ENDIF ENDIF GOTO 30 END SUBROUTINE MAKENETPARAMETERS SUBROUTINE MERGENETPARAMETERS() USE M_MERGENET use unstruc_display use unstruc_version_module, only : unstruc_company, unstruc_program implicit none integer :: i integer :: ifexit integer :: ifinit integer :: ih integer :: il integer :: imp integer :: inp integer :: ir integer :: iw integer :: ixp integer :: iyp integer :: key integer :: nbut integer :: nlevel integer :: numfldactual integer :: numparactual integer, parameter :: NUMPAR = 2, NUMFLD = 2*NUMPAR INTEGER IX(NUMFLD),IY(NUMFLD),IS(NUMFLD),IT(NUMFLD) CHARACTER WRDKEY*40, OPTION(NUMPAR)*40, HELPM(NUMPAR)*60 COMMON /HELPNOW/ WRDKEY,NLEVEL integer, external :: infoinput external :: highlight_form_line NLEVEL = 4 OPTION(1) = 'MAXIMUM NR OF LINKS OF A MERGING NODE( )' ; IT(1*2) = 2 OPTION(2) = 'MERGE NODES WITH SAME X/Y/Z: 1/2/3( )' ; IT(2*2) = 2 !123456789012345678901234567890123456789012345678901234567890 ! 1 2 3 4 5 6 HELPM (1) = & 'ONLY NODES WITH THIS NUMBER OF LINKS OR LESS WILL BE MERGED ' HELPM (2) = & '1 = MERGING NODES MUST HAVE EQUAL X-COORDINATE, 2=EQUAL Y-CO' CALL SAVEKEYS() NUMPARACTUAL = NUMPAR NUMFLDACTUAL = 2*NUMPARACTUAL IR = 0 DO I = 1,NUMPARACTUAL IL = IR + 1 ; IR = IL + 1 IS(IL) = 82 ; IS(IR) = 10 IX(IL) = 10 ; IX(IR) = 100 IY(IL) = 2*I ; IY(IR) = 2*I IT(IL) = 1001 ! ir staat hierboven ENDDO ! Initialise CALL IWinWordWrap('OFF') CALL ITEXTCOLOURN(HLPFOR, HLPBCK) CALL INHIGHLIGHT('WHITE','RED') IW = NPOS(3) IXP = NPOS(1) + (IWS-IW)/2 IYP = NPOS(2) IH = IHS - 9 ! Header of filewindow CALL IWinAction('FPC') CALL IWinOpen(IXP,IYP,IW,1) CALL ITEXTCOLOURN(LBLFOR,LBLBCK) CALL IWinOutCentre(1,trim(unstruc_company)//'-'//trim(unstruc_program)// ' PARAMETER FORM') CALL ITEXTCOLOURN(HLPFOR,HLPBCK) ! Explain keyfunctions in bottom window CALL IWinAction('FPC') CALL IWinOpen(IXP,IHS-1,IW,2) CALL IWinOutStringXY(1,1,'move = , Tab, confirm = Enter, no change = Esc, help = F3') CALL IWinOutStringXY(1,2,'right mouse = Enter, click outside window = Esc') ! Filewindow is middelste window CALL IWinAction('FPC') CALL IWinOpen(IXP,IYP+3,IW,IH) CALL InControlKey(29,129) CALL InControlKey(30,128) ! Define a new form by supplying arrays containing Field positions, sizes and types CALL IFORMDEFINE('W',NUMFLDACTUAL,IX,IY,IS,IT) ! Define a help field and define help strings for 2 of the 4 input fields CALL IFORMHELP(13,IH,60) IR = 0 DO I = 1,NUMPARACTUAL IL = IR + 1 IR = IL + 1 CALL IFORMPUTSTRING (IL,OPTION(I)) CALL IFORMPUTHELP (IR,HELPM(I)) CALL IFORMATTRIBUTEN(IR,0,0,7) ENDDO CALL IFORMPUTINTEGER (2*1, NUMM ) CALL IFORMPUTINTEGER (2*2, JXYZ ) ! Display the form with numeric fields left justified and set the initial field to number 2 CALL IOUTJUSTIFYNUM('L') IFEXIT = 2 call IFormAttribute(IFEXIT-1, 'BU', ' ', ' ') CALL IFORMSHOW() 30 CONTINUE IFINIT = IFEXIT CALL IFormEditUser(IFINIT, IFEXIT, highlight_form_line) ! check for Help, Confirm, Quit KEY = INFOINPUT(55) IF (KEY .EQ. -2) THEN NBUT = INFOINPUT(61) IF (NBUT .GE. 1) THEN IMP = INFOINPUT(62) + 1 INP = INFOINPUT(63) + 1 IF (IMP .GE. IXP .AND. IMP .LT. IXP+IW .AND. & INP .GE. IYP+3 .AND. INP .LT. IYP+IH+3+2 ) THEN IF (NBUT .EQ. 1) THEN KEY = 21 ELSE KEY = 22 ENDIF ELSE KEY = 23 ENDIF ENDIF ELSE IF (KEY .EQ. -1) THEN KEY = INFOINPUT(57) ENDIF IF (KEY .EQ. 26) THEN WRDKEY = OPTION(IFEXIT/2) CALL HELP(WRDKEY,NLEVEL) ELSE IF (KEY .EQ. 22 .OR. KEY .EQ. 23) THEN IF (KEY .EQ. 22) THEN CALL IFORMGETINTEGER (2*1 , NUMM ) CALL IFORMGETINTEGER (2*2 , JXYZ ) ENDIF CALL IWinClose(1) CALL IWinClose(1) CALL IWinClose(1) CALL RESTOREKEYS() RETURN ELSE IF (KEY .EQ. 21) THEN IF (IFEXIT .EQ. 1 .OR. IFEXIT .EQ. 3) THEN WRDKEY = HELPM(IFEXIT) CALL HELP(WRDKEY,NLEVEL) ENDIF ENDIF GOTO 30 END SUBROUTINE MERGENETPARAMETERS SUBROUTINE DISPUT(NPUT) USE M_SFERIC USE M_DEVICES use network_data, only: kn3typ implicit none integer :: jav integer :: jview double precision :: xyz integer :: NPUT COMMON /HOWTOVIEW/ JVIEW, JAV, XYZ ! 1,2,3 OF 4 CHARACTER TEX*32 IF (NPUT .EQ. 0) THEN TEX =' GET A POINT ' ELSE IF (NPUT .EQ. 1) THEN TEX =' PUT A POINT ' ELSE IF (NPUT .EQ. -1) THEN TEX =' INSERT A POINT ' ELSE IF (NPUT .EQ. -2) THEN TEX =' DELETE A POINT ' ELSE IF (NPUT .EQ. -3) THEN TEX =' DELETE A SPLINE ' ELSE IF (NPUT .EQ. -4 .or. NPUT .EQ. -5) THEN TEX =' GET A SPLINE ' ELSE IF (NPUT .EQ. -41 .or. NPUT .EQ. -51) THEN TEX =' PUT A SPLINE ' ELSE IF (NPUT .EQ. -6 ) THEN TEX =' GET A SPLINE ' ELSE IF (NPUT .EQ. 2) THEN TEX =' GET SECOND POINT ' ELSE IF (NPUT .EQ. 3) THEN TEX =' CLICK GRID POINT ' ELSE IF (NPUT .EQ. 4) THEN TEX =' ' ELSE IF (NPUT .EQ. 5) THEN TEX= 'CLICK VIEWPOINT ' ELSE IF (NPUT .EQ. 6) THEN TEX ='PRESS + OR - ' ELSE IF (NPUT .EQ. 7) THEN TEX ='PRESS ANY KEY ' ELSE IF (NPUT .EQ. 8) THEN TEX ='CLICK BLOCK POINT 1 ' ELSE IF (NPUT .EQ. 9) THEN TEX ='CLICK BLOCK POINT 2 ' ELSE IF (NPUT .EQ. 10) THEN TEX ='CLICK LINE POINT 1 ' ELSE IF (NPUT .EQ. 11) THEN TEX ='CLICK LINE POINT 2 ' ELSE IF (NPUT .EQ. 12) THEN TEX ='ENTER OR ESC ' ELSE IF (NPUT .EQ. 13) THEN TEX ='GET POINT ON LINE ' ELSE IF (NPUT .EQ. 14) THEN TEX ='CLICK INFLUENCE 1 OR RIGHT MOUSE' ELSE IF (NPUT .EQ. 15) THEN TEX ='CLICK INFLUENCE 2 OR RIGHT MOUSE' ELSE IF (NPUT .EQ. 16) THEN TEX ='REPLACE POINT ' ELSE IF (NPUT .EQ. 17) THEN TEX ='CLICK BLOCK 3 OR RIGHT MOUSE ' ELSE IF (NPUT .EQ. 18) THEN TEX ='CLICK BLOCK 4 OR RIGHT MOUSE ' ELSE IF (NPUT .EQ. 19) THEN TEX ='CLICK RIGHT MOUSE OR Escape ' ELSE IF (NPUT .EQ. 20) THEN TEX =' GET A POINT ON LINE OR RIGHT MS' ELSE IF (NPUT .EQ. 21) THEN TEX ='PRESS + OR - , SPACE BAR or Del ' ELSE IF (NPUT .EQ. 22) THEN TEX =' CLICK DEPTH POINT ' ELSE IF (NPUT .EQ. 23) THEN TEX =' CLICK SAMPLE POINT ' ELSE IF (NPUT .EQ. 24) THEN TEX =' PUT SAMPLE POINT ' ELSE IF (NPUT .EQ. 25) THEN TEX =' INSERT SAMPLE POINT ' ELSE IF (NPUT .EQ. 26) THEN TEX =' DELETE SAMPLE POINT ' ELSE IF (NPUT .EQ. 27) THEN TEX =' CLICK SAMPLE POINT, CHANGE VAL.' ELSE IF (NPUT .EQ. 28) THEN TEX =' GET DDBOUNDARY POINT ' ELSE IF (NPUT .EQ. 29) THEN TEX =' PUT DDBOUNDARY POINT ' ELSE IF (NPUT .EQ. 30) THEN TEX =' INSERT DDBOUNDARY POINT 1 ' ELSE IF (NPUT .EQ. 31) THEN TEX =' INSERT DDBOUNDARY POINT 2 ' ELSE IF (NPUT .EQ. 32) THEN TEX =' DELETE DDBOUNDARY ' ELSE IF (NPUT .EQ. 33) THEN TEX =' CLICK COLOR TO CHANGE ' ELSE IF (NPUT .EQ. 34) THEN TEX =' CLICK COLOR IN TABLE ' ELSE IF (NPUT .EQ. 35) THEN TEX =' USE ARROW KEYS TO CHANGE COLOUR' ELSE IF (NPUT .EQ. 36) THEN TEX =' INDICATE WATER RELEASE POINT ' ELSE IF (NPUT .EQ. 37) THEN TEX =' PRESS + OR SPACE BAR ' ELSE IF (NPUT .EQ. 38) THEN TEX =' CLICK FIRST NODE ' ELSE IF (NPUT .EQ. 39) THEN TEX =' CLICK NEXT #D NODE ' write (TEX(13:13), '(i1)') KN3TYP ! 1D or 2D ELSE IF (NPUT .EQ. 40) THEN TEX =' CLICK FIRST POL.POINT NEAR LDB ' ELSE IF (NPUT .EQ. 41) THEN TEX =' CLICK SECOND POL.POINT NEAR LDB' ELSE IF (NPUT .EQ. 42) THEN TEX =' CLICK FIRST POL.POINT NEAR NET ' ELSE IF (NPUT .EQ. 43) THEN TEX =' CLICK SECOND POL.POINT NEAR NET' ELSE IF (NPUT .EQ. 44) THEN TEX =' CLICK 1ST POL. START/END POINT ' ELSE IF (NPUT .EQ. 45) THEN TEX =' CLICK 2ND POL. START/END POINT ' ELSE IF (NPUT .EQ. 46) THEN TEX =' CLICK 1ST POL. START/END POINT ' ELSE IF (NPUT .EQ. 47) THEN TEX =' CLICK 2ND POL. START/END POINT ' ELSE IF (NPUT .EQ. 48) THEN TEX =' CLICK LINE' ELSE IF (NPUT .EQ. 49) THEN TEX =' CLICK Sample for isocol minval ' ELSE IF (NPUT .EQ. 50) THEN TEX =' CLICK Sample for isocol maxval ' ELSE IF (NPUT .EQ. 51) THEN TEX =' CLICK FLOW NODE ' ELSE IF (NPUT .EQ. 52) THEN TEX =' CLICK FLOW LINK ' ELSE IF (NPUT .EQ. 53) THEN TEX =' CLICK flow node for isocol minval ' ELSE IF (NPUT .EQ. 54) THEN TEX =' CLICK flow node for isocol maxval ' ELSE IF (NPUT .EQ. 55) THEN TEX =' CLICK NET LINK ' ELSE IF (NPUT .EQ. 56) THEN TEX =' GET A POINT ' ELSE IF (NPUT .EQ. 57) THEN TEX =' PUT A POINT ' ELSE IF (NPUT .EQ. 58) THEN TEX =' CLICK FIRST POINT ' ELSE IF (NPUT .EQ. 59) THEN TEX =' CLICK A BOUNDARY POINT ' ELSE IF (NPUT .EQ. 60) THEN TEX =' CLICK NETWORK POINT, CHANGE VAL' ELSE IF (NPUT .EQ. 61) THEN TEX =' CLICK POLYGON POINT, CHANGE VAL' ENDIF CALL KTEXT(TEX,1,4,15) ! ! IF (JVIEW .EQ. 1) THEN ! CALL KTEXT(' NORMAL ',IWS-9,IHS-1,15) ! ELSE IF (JVIEW .EQ. 2) THEN ! CALL KTEXT(' FROM LEFT',IWS-9,IHS-1,15) ! ELSE IF (JVIEW .EQ. 3) THEN ! CALL KTEXT(' FROM TOP ',IWS-9,IHS-1,15) ! ELSE IF (JVIEW .EQ. 4) THEN ! CALL KTEXT(' PERSP-view ',IWS-11,IHS-1,15) ! ENDIF IF (JSFERIC == 1) THEN CALL KTEXT(' SPHERICAL',IWS-9,IHS-2,15) ELSE CALL KTEXT(' CARTESIAN',IWS-9,IHS-2,15) ENDIF RETURN END SUBROUTINE DISPUT !> Selects the edit mode for a given keypress code. !! Alt-P/-N/-S/-G/-B/-F for the respective modes. subroutine selecteditmode(newmode, key) implicit none integer, intent(inout) :: newmode !< New mode (0 for invalid key presses). integer, intent(in) :: key !< Key press code if (key == 512+80) then ! Alt+P: Edit Polygon newmode = 1 else if (key == 512+78) then ! Alt+N: Edit Network newmode = 2 else if (key == 512+83) then ! Alt+S: Edit Splines newmode = 3 else if (key == 512+71) then ! Alt+G: Edit Grid newmode = 4 else if (key == 512+66) then ! Alt+B: Edit Samples (bathymetry) newmode = 5 else if (key == 512+70) then ! Alt+F: Edit Flow newmode = 6 end if return end subroutine selecteditmode SUBROUTINE EDITPOL(MODE,KEY,NETFLOW) USE M_POLYGON use network_data, only: netstat, NETSTAT_CELLS_DIRTY USE M_MISSING use m_partitioninfo use unstruc_colors use unstruc_display use m_flow, only : kmx, jasal, iturbulencemodel use unstruc_api use dfm_error use unstruc_messages implicit none double precision :: cdflow double precision :: cfric double precision :: fbouy double precision :: fdyn integer :: janet integer :: jaquit, jazoomshift, nshift integer :: k integer :: l1 integer :: l2 integer :: moments integer :: nlevel integer :: nput integer :: num integer :: numb integer :: nwhat integer :: MODE, KEY, NETFLOW integer :: newmode, mout double precision :: xp, yp, RD integer :: JQN integer :: iresult logical, external :: ispolystartend COMMON /HELPNOW/ WRDKEY,NLEVEL COMMON /QNRGF/ JQN COMMON /SETTINGS/ FDYN, FBOUY, CDFLOW, CFRIC, MOMENTS, JANET CHARACTER TEX*26, WRDKEY*40 if (jampi == 1) then write(tex,"(' EDITPOL:', I5)") my_rank else tex = 'EDITPOL' endif WRDKEY = TEX NLEVEL = 2 NUM = 0 NWHAT = 0 NPUT = -1 NUMB = 2 JAQUIT = 0 MP = NPL L1 = 0 !call newfil( mout,'rightlev_0001.tim') !do k = 1,40 ! write(mout,*) (k-1)*1440d0 !enddo !call doclose (mout) CALL SAVEPOL() 10 CONTINUE CALL DRAWNU(KEY) CALL KTEXT(TEX,1,2,15) CALL putget_un(NUM,NWHAT,NPUT,NUMB,XP,YP,KEY) IF (KEY .NE. 81 .AND. KEY .NE. 81+32) JAQUIT = 0 IF (NUM .NE. 0) THEN ! ER IS EEN KEUZE IF (NUM .EQ. 4) THEN MODE = NWHAT RETURN ELSE IF ((JQN .EQ. 1 .AND. NUM .EQ. 5 .AND. NWHAT .EQ. 1) .OR. & (JQN .EQ. 2 .AND. NUM .EQ. 5 .AND. NWHAT .EQ. 8)) THEN MP = 0 ENDIF ENDIF CALL CHOICES(MODE,NUM,NWHAT,KEY) ELSE IF (KEY >= 577) THEN ! Alt+letter switches edit mode. call selecteditmode(newmode, key) if (newmode > 0 .and. newmode /= mode) then mode = newmode return end if ELSE IF (KEY .EQ. 21) THEN ! edit/modify polygon: netcell administration out of date ! netstat = NETSTAT_CELLS_DIRTY ! unwanted during flow computations ! INS KEY CALL SAVEPOL() IF (NPUT .EQ. 0 .OR. NPUT .EQ. -2 .OR. NPUT .EQ. 56 .OR. NPUT .EQ. 61) THEN ! kijken welk punt bij deleten en bij oppakken CALL ISPOI1(XPL, YPL, NPL, XP, YP, MP) ENDIF IF ( NPUT .EQ. 0 .AND. MP .NE. 0) THEN ! punt oppakken CALL MOVABS(XP,YP) CALL HLCIR(RCIR, NCOLTX) NPUT = 1 ELSE IF (NPUT .EQ. 1 .AND. MP .NE. 0) THEN ! punt neerzetten CALL DISP2C(XPL, YPL, NPL, RCIR, 0) XPL(MP) = XP YPL(MP) = YP CALL DISP2C(XPL, YPL, NPL, RCIR, NCOLTX) NPUT = 0 ELSE IF (NPUT .EQ. -1) THEN ! punt toevoegen call increasepol(npl+1, 1) CALL DISP2C(XPL, YPL, NPL, RCIR, 0) CALL MODLN2(XPL, YPL, ZPL, MAXPOL, NPL, MP, XP, YP, NPUT) CALL DISP2C(XPL, YPL, NPL, RCIR, NCOLTX) ELSE IF ( NPUT .EQ. -2 .AND. MP .NE. 0) THEN ! punt deleten CALL SETCOL(0) CALL MOVABS(XP,YP) IF (MP .EQ. 1) THEN CALL CIR(1.4d0*RCIR) ELSE CALL CIR(RCIR) ENDIF CALL DISP2C(XPL, YPL, NPL, RCIR, 0) CALL MODLN2(XPL, YPL, ZPL, MAXPOL, NPL, MP, XP, YP, NPUT) CALL DISP2C(XPL, YPL, NPL, RCIR, NCOLTX) ELSE IF ( NPUT == 40 .OR. NPUT == 41) THEN ! Polyline to land boundary CALL ISPOI1(XPL, YPL, NPL, XP, YP, MP) IF (MP .NE. 0) THEN CALL MOVABS(XP,YP) CALL HLCIR(RCIR, NCOLTX) IF (L1 == 0) THEN L1 = MP NPUT = 41 ELSE L2 = MP NPUT = 40 CALL POLTOLAND(L1,L2) L1 = 0 L2 = 0 KEY = 3 ENDIF ENDIF ELSE IF ( NPUT == 42 .OR. NPUT == 43) THEN ! Polyline to net boundary CALL ISPOI1(XPL, YPL, NPL, XP, YP, MP) IF (MP .NE. 0) THEN CALL MOVABS(XP,YP) CALL HLCIR(RCIR, NCOLTX) IF (L1 == 0) THEN L1 = MP NPUT = 43 ELSE L2 = MP NPUT = 42 CALL POLTONET(L1,L2) L1 = 0 L2 = 0 KEY = 3 ENDIF ENDIF ELSE IF ( NPUT == 44 .OR. NPUT == 45) THEN ! Merge two polylines, click two end points. CALL ISPOI1(XPL, YPL, NPL, XP, YP, MP) if (mp /= 0 .and. .not. ispolystartend(xpl, ypl, npl, maxpol, mp)) then ! Clicked point was not an end point, discard it. mp = 0 end if IF (MP .NE. 0) THEN CALL MOVABS(XP,YP) CALL HLCIR(RCIR, NCOLTX) IF (L1 == 0) THEN L1 = MP NPUT = 45 ELSE L2 = MP NPUT = 44 call savepol() CALL mergepoly(xpl, ypl, zpl, maxpol, npl, L1,L2) L1 = 0 L2 = 0 KEY = 3 ENDIF ENDIF ELSE IF ( NPUT == 46 .OR. NPUT == 47) THEN ! Refine polygon substring (click 2 points) CALL ISPOI1(XPL, YPL, NPL, XP, YP, MP) IF (MP .NE. 0) THEN CALL MOVABS(XP,YP) CALL HLCIR(RCIR, NCOLTX) IF (L1 == 0) THEN L1 = MP NPUT = 47 ELSE L2 = MP NPUT = 47 CALL refinepolygonpart(L1,L2) L1 = 0 L2 = 0 KEY = 3 ENDIF ENDIF ELSE IF ( NPUT .EQ. 56 .AND. MP .NE. 0) THEN ! punt oppakken CALL MOVABS(XP,YP) CALL HLCIR(RCIR, NCOLTX) NPUT = 57 ELSE IF (NPUT .EQ. 57 .AND. MP .NE. 0) THEN ! punt neerzetten CALL DISP2C(XPL, YPL, NPL, RCIR, 0) call copypol(MP, XP, YP) CALL DISP2C(XPL, YPL, NPL, RCIR, NCOLTX) NPUT = 56 ELSE IF ( NPUT .EQ. 61 .AND. MP .NE. 0) THEN ! punt in waarde veranderen RD = zpl(MP) CALL TYPEVALUE(RD,KEY) CALL KCIR(XP,YP,RD) Zpl(MP) = RD ENDIF ELSE IF (KEY .EQ. 22) THEN ! ENTER KEY IF (NETFLOW == 2) THEN iresult = FLOW() if (iresult == DFM_SIGINT) then call mess(LEVEL_ERROR, 'Final handling of SIGINT signal. Stopping program.') call STOPINT() else if (iresult /= DFM_NOERR) then call qnerror('Error occurred while running, please inspect your diagnostic output.',' ', ' ') end if ! ELSE IF (NPL .EQ. 0) THEN ! CALL SOLVE(0) ELSE IF (NPL .GE. 3 .AND. NPL .LE. 4) THEN CALL MAKEPANELXY(1-JANET) CALL DELPOL() ELSE IF (NPL .GE. 2) THEN CALL POLTOLINES() CALL DELPOL() ENDIF KEY = 3 ELSE IF (KEY .EQ. 23) THEN ! ESC CALL RESTOREPOL() ! (MP,MPS,XPL,YPL,NPL,XPH,YPH,NPH,MAXPOL) KEY = 3 if (nput == 1) then NPUT = 0 end if ELSE IF (KEY .EQ. 27) THEN ! TAB ! CALL SHWXYZ2(X,Y,RD1,RD2,RD3,MC,NC,0,KEY,M,N) ELSE IF (KEY .EQ. 73 .OR. KEY .EQ. 73+32) THEN IF (NPUT .NE. 1) THEN ! kijken welk punt dit is t.b.v insert mode CALL ISPOI1( XPL, YPL, NPL, XP, YP, MP) IF (MP == 0 .AND. NPL .NE. 0) THEN NPL = NPL + 1 call increasepol(npl, 1) XPL(NPL) = dmiss YPL(NPL) = dmiss ZPL(NPL) = dmiss else if (mp /= 0) then ! Point was found, now highlight it temporarily on screen. CALL MOVABS(XP,YP) CALL HLCIR(RCIR, NCOLTX) ENDIF ENDIF NPUT = -1 ELSE IF (KEY .EQ. 8) THEN ! Backspace KEY ! delete all polygons and stay in previous mode. call savepol() call delpol() key = 3 ELSE IF (KEY .EQ. 68 .OR. KEY .EQ. 68+32) THEN ! D KEY ! delete mode NPUT = -2 ELSE IF (KEY .EQ. 82 .OR. KEY .EQ. 82+32 .AND. NPUT .NE. 1) THEN ! R KEY ! replace mode, maar niet bij zetten NPUT = 0 ELSE IF (KEY .EQ. 67 .OR. KEY .EQ. 67+32 ) THEN ! C KEY ! CHANGE ZPL VALUE NPUT = 61 ELSE IF (KEY .EQ. 88 .OR. KEY .EQ. 88+32) THEN ! X KEY ! Lijn openbreken met X ! CALL SAVEP(MP,MPS,XPL,YPL,NPL,XPH,YPH,NPH,MAXPOL) CALL SAVEPOL() CALL ISPOI1(XPL, YPL, NPL, XP, YP, MP) IF (MP .NE. 0) THEN CALL DISP2C(XPL, YPL, NPL, RCIR, 0) XPL(MP) = dmiss YPL(MP) = dmiss ZPL(MP) = dmiss CALL DISP2C(XPL, YPL, NPL, RCIR, NCOLTX) ENDIF ELSE IF (KEY .EQ. 69+32) THEN ! e KEY ! edit/modify polygon: netcell administration out of date netstat = NETSTAT_CELLS_DIRTY ! Delete deelpolygoon met E ! CALL SAVEP(MP,MPS,XPL,YPL,NPL,XPH,YPH,NPH,MAXPOL) CALL SAVEPOL() CALL ISPOI1(XPL, YPL, NPL, XP, YP, MP) IF (MP .NE. 0) THEN CALL DISP2C(XPL, YPL, NPL, RCIR, 0) CALL MODLN2(XPL, YPL, ZPL, MAXPOL, NPL, MP, XP, YP, -3) CALL DISP2C(XPL, YPL, NPL, RCIR, NCOLTX) ENDIF ELSE IF ( KEY .EQ. 69 ) THEN ! E key ! edit/modify polygon: netcell administration out of date netstat = NETSTAT_CELLS_DIRTY CALL SAVEPOL() CALL ISPOI1(XPL, YPL, NPL, XP, YP, MP) IF (MP .NE. 0) THEN CALL DISP2C(XPL, YPL, NPL, RCIR, 0) CALL MODLN2(XPL, YPL, ZPL, MAXPOL, NPL, MP, XP, YP, -4) CALL DISP2C(XPL, YPL, NPL, RCIR, NCOLTX) ENDIF ELSE IF (-KEY .EQ. 71 .OR. -KEY .EQ. 71+32) THEN ! G KEY ! MIRROR LAST POLYGON PART IN Y CALL SAVEPOL() !CALL SAVEP(MP,MPS,XPL,YPL,NPL,XPH,YPH,NPH,MAXPOL) DO K = MP-1,1,-1 NPL = NPL + 1 XPL(NPL) = XPL(K) YPL(NPL) = 2*YPL(MP) - YPL(K) ZPL(NPL) = ZPL(K) ENDDO CALL DISP2C(XPL, YPL, NPL, RCIR, NCOLTX) MP = NPL ELSE IF (KEY .EQ. 81 .OR. KEY .EQ. 81+32) THEN ! JAQUIT = JAQUIT + 1 IF (JAQUIT .EQ. 2) CALL STOPINT() ELSE IF (KEY .EQ. 86 .OR. KEY .EQ. 86+32) THEN CALL VIEWCYCLE(KEY) ELSE IF (KEY .EQ. 43 .or. KEY .EQ. 140) THEN ! - CALL KPLOTPLUSMIN(-1) key = 3 ELSE IF (KEY .EQ. 45 .or. KEY .EQ. 141) THEN ! + call KPLOTPLUSMIN(1) key = 3 ELSE IF (KEY .EQ. 42) THEN ! * CALL nPLOTPLUSMIN(1) key = 3 ELSE IF (KEY .EQ. 47) THEN ! / call nPLOTPLUSMIN(-1) key = 3 ELSE IF ( KEY .EQ. 87+32) THEN ! w for water + 1 (m) call DROPWATER(XP,YP,1) key = 3 ELSE IF (KEY .EQ. 87 ) THEN ! W for water - 1 (m) call DROPWATER(XP,YP,-1) key = 3 ELSE IF ( KEY .EQ. 66+32) THEN ! b for bottom + 1 (m) call DROPland(XP,YP, 1) key = 3 ELSE IF (KEY .EQ. 66 ) THEN ! B for bottom - 1 (m) call DROPland(XP,YP, -1) key = 3 ELSE IF (jasal > 0 .and. KEY .EQ. 83+32) THEN ! s for salt + 1 (ppt) call DROPzout( 1) key = 3 ELSE IF (jasal > 0 .and. KEY .EQ. 83) THEN ! S for salt - 1 (ppt) call DROPzout(-1) key = 3 ELSE IF (kmx > 0 .and. iturbulencemodel == 3 .and. KEY .EQ. 75+32) THEN ! k for kinetic + 0.01 call DROPk(XP,YP,1) key = 3 ELSE IF (KEY .EQ. 84+32) THEN ! t add (to) tracer call drop_tracer(xp,yp,1d0) ELSE IF (KEY .EQ. 84) THEN ! T t substract from tracer call drop_tracer(xp,yp,-1d0) ELSE IF (KEY .EQ. 32) THEN call flow_spatietimestep() key = 3 ELSE IF (KEY .EQ. 76 .OR. KEY .EQ. 76+32) THEN ! L KEY NPUT = 40 ! TO LAND MODE ELSE IF (KEY .EQ. 70 .OR. KEY .EQ. 70+32) THEN ! F KEY NPUT = 46 ! Refine polygon between two clicked points ELSE IF (KEY .EQ. 77 .OR. KEY .EQ. 77+32) THEN ! M KEY NPUT = 44 ! Merge twee deelpolygonen ELSE IF (KEY .EQ. 78 .OR. KEY .EQ. 78+32) THEN ! N KEY NPUT = 42 ! TO NET MODE ELSE IF (KEY .EQ. 27 .OR. KEY .EQ. 27+32) THEN ! ; KEY jazoomshift = 0 nshift = 0 do while (jazoomshift .ne. 1 .and. nshift < numzoomshift*npl) call zoomshift(nshift) key = 3 ndrawpol = 1 CALL DRAWNU(KEY) call halt2(jazoomshift) enddo ndrawpol = 2 ELSE IF (KEY .EQ. 46) THEN ! . KEY CALL ISPOI1(XPL, YPL, NPL, XP, YP, MP) call flippo(MP) key = 3 ENDIF ! GOTO 10 ! END SUBROUTINE EDITPOL SUBROUTINE EDITSPLINES(MODE,KEY) use unstruc_colors USE M_SPLINES use unstruc_display, only: plotSplines implicit none integer, intent(inout) :: mode, key integer :: newmode ! use rgfblock ! CHARACTER WRDKEY*40 integer :: nlevel COMMON /HELPNOW/ WRDKEY,NLEVEL integer :: ndraw, IIJ COMMON /DRAWTHIS/ NDRAW(40) integer :: ja, num, numb, ncol, nwhat, nput double precision :: xp, yp WRDKEY = 'EDIT SPLINES' NLEVEL = 2 JA = 0 NUM = 0 NWHAT = 0 NPUT = -1 NUMB = 9 NCOL = NCOLSP NDRAW(15) = 1 MP = 0 NP = 0 CALL BOTLIN(0,NUMB,KEY) !! TEST CALL saveSplines() 10 CONTINUE CALL DRAWNU(KEY) CALL KTEXT(' Edit Splines ',1,2,15) !CALL KTEXT(' Click Spline Points',1,3,15) CALL putget_un(NUM,NWHAT,NPUT,NUMB,XP,YP,KEY) IF (NUM .NE. 0) THEN ! ER IS EEN KEUZE IF (NUM .EQ. 4) THEN MODE = NWHAT RETURN ELSE if (NUM .eq. 5 .and. NWHAT .eq. 2) then mp = 0 np = 0 endif CALL CHOICES(MODE,NUM,NWHAT,KEY) ENDIF ELSE IF (KEY >= 577) THEN ! Alt+letter switches edit mode. call selecteditmode(newmode, key) if (newmode > 0 .and. newmode /= mode) then mode = newmode return end if ELSE IF (KEY .EQ. 21) THEN ! INS KEY IF (NPUT .EQ. 0 .OR. NPUT .EQ. -2 .OR. NPUT .EQ. -3 .OR. NPUT .EQ. -4 .OR. NPUT .EQ. -5 .OR. NPUT .EQ. -6) THEN ! kijken welk punt bij deleten en bij oppakken CALL isSplinePoint(XP, YP, RCIR, MP, NP) ENDIF IF ( NPUT .EQ. 0 .AND. MP .NE. 0) THEN ! punt oppakken CALL MOVABS(XP,YP) CALL SETCOL(0) CALL CIR(RCIR) CALL IGRFILLPATTERN(0,0,0) CALL SETCOL(NCOL) CALL CIR(RCIR) CALL IGRFILLPATTERN(4,0,0) NPUT = 1 ELSE IF (NPUT .EQ. 1 .AND. MP .NE. 0) THEN ! punt neerzetten CALL saveSplines() CALL plotSplines(MP, MP, 0) call setSplinePoint(MP, NP, XP, YP) CALL plotSplines(MP, MP, NCOL) NPUT = 0 ELSE IF (NPUT .EQ. -1) THEN ! punt toevoegen CALL saveSplines() CALL plotSplines(MP, MP, 0) call insertSplinePoint(mp, np, xp, yp) CALL plotSplines(MP, MP, NCOL) ELSE IF ( NPUT .EQ. -2 .AND. MP .NE. 0) THEN ! punt deleten CALL saveSplines() IIJ = 68 CALL SETCOL(0) CALL MOVABS(XP,YP) IF (MP .EQ. 1) THEN CALL CIR(1.4*RCIR) ELSE CALL CIR(RCIR) ENDIF CALL plotSplines(MP, MP, 0) call delSplinePoint(mp, np) CALL plotSplines(MP, MP, NCOL) ELSE IF ( NPUT .EQ. -3 .AND. MP .NE. 0) THEN ! hele spline deleten CALL saveSplines() IIJ = 68 CALL SETCOL(0) CALL MOVABS(XP,YP) IF (MP .EQ. 1) THEN CALL CIR(1.4*RCIR) ELSE CALL CIR(RCIR) ENDIF CALL plotSplines(MP, MP, 0) call delSpline(mp) CALL plotSplines(MP, MP, NCOL) ELSE IF ( ( NPUT .eq. -4 .or. NPUT .eq. -5 ) .AND. MP .NE. 0) THEN ! move or copy whole spline, get spline call savesplines() call setcol(0) call movabs(xp,yp) if ( mp .eq. 1 ) then call cir(1.4*rcir) else call cir(rcir) end if NPUT = 10*NPUT-1 ! -41 .or. -51 ELSE IF ( NPUT .eq. -41 .AND. MP .NE. 0) THEN ! move whole spline, put spline CALL plotSplines(MP, MP, 0) call movespline(mp, np, xp, yp) CALL plotSplines(MP, MP, NCOL) NPUT = -4 ELSE IF ( NPUT .eq. -51 .AND. MP .NE. 0) THEN ! copy whole spline, put spline CALL plotSplines(MP, MP, NCOL) ! plot original spline call copyspline(mp, np, xp, yp) CALL plotSplines(MP, MP, NCOL) NPUT = -5 ELSE IF ( NPUT .eq. -6 .AND. MP .NE. 0) THEN ! snap spline to landboundary CALL plotSplines(MP, MP, 0) call snap_spline(MP) CALL plotSplines(MP, MP, NCOL) MP = 0 ENDIF call dispnode2(mp, np) ELSE IF (KEY .EQ. 22) THEN ! ENTER KEY IF (NPUT .EQ. -1 .AND. NP .GE. 2) THEN MP = 0 NP = 0 ENDIF ELSE IF (KEY .EQ. 23) THEN ! ESC CALL restoreSplines() KEY = 3 ELSE IF (KEY .EQ. 73 .OR. KEY .EQ. 73+32) THEN IF (NPUT .NE. 1) THEN ! kijken welk punt dit is t.b.v insert mode (I) CALL isSplinePoint(XP, YP, RCIR, MP, NP) if (mp/=0 .and. np/=0) then ! Point was found, now highlight it temporarily on screen. CALL MOVABS(XP,YP) CALL SETCOL(0) CALL CIR(RCIR) CALL IGRFILLPATTERN(0,0,0) CALL SETCOL(NCOL) CALL CIR(RCIR) CALL IGRFILLPATTERN(4,0,0) endif ENDIF NPUT = -1 ELSE IF (KEY .EQ. 8) THEN ! Backspace KEY ! delete all splines (within polygon if any) and stay in previous mode. call saveSplines() call deleteSelectedSplines() key = 3 ELSE IF (KEY .EQ. 68 .OR. KEY .EQ. 68+32) THEN ! delete mode losse punten (D) NPUT = -2 ELSE IF (KEY .EQ. 88 .OR. KEY .EQ. 88+32) THEN ! delete mode hele splines (X) NPUT = -3 ELSE IF (KEY .EQ. 77 .OR. KEY .EQ. 77+32) THEN ! move whole spline (M) NPUT = -4 ELSE IF (KEY .EQ. 67 .OR. KEY .EQ. 67+32) THEN ! copy whole spline (C) NPUT = -5 ELSE IF (KEY .EQ. 76 .OR. KEY .EQ. 76+32) THEN ! snap whole spline to land (L) NPUT = -6 ELSE IF (KEY .EQ. 82 .OR. KEY .EQ. 82+32 .AND. NPUT .NE. 1) THEN ! replace mode, maar niet bij zetten (R) NPUT = 0 ELSE IF (KEY .EQ. 98) THEN ! b RINGS BELL CALL KTEXT(' B Rings Bell',2,6,11) CALL OKAY(0) ENDIF ! GOTO 10 ! END subroutine editSplines SUBROUTINE CHANGEDISPLAYPARAMETERS() USE M_RAAITEK USE M_MISSING use unstruc_display use m_sediment use unstruc_version_module, only : unstruc_company, unstruc_program use unstruc_opengl, only : jaOpenGL implicit none double precision :: dv double precision :: dx double precision :: dxshow double precision :: dy integer :: i integer :: ifexit integer :: ifinit integer :: ih integer :: ihcopts integer :: il integer :: imp integer :: inp integer :: ir integer :: iw integer :: ixp integer :: iyp integer :: jaauto integer :: jaeps integer :: jaland integer :: jaxis integer :: key integer :: nbut integer :: ncols integer :: ndec integer :: ndraw integer :: nhcdev integer :: nie integer :: nis integer :: nlevel integer :: numfldactual integer :: numhcopts integer :: numparactual integer :: nv integer :: nvec double precision :: rmiss, val, vfac, vfacforce, vmax, vmin double precision :: x0 double precision :: xd double precision :: xleft double precision :: xsc double precision :: y0 double precision :: ybot double precision :: ysc double precision :: scalesize double precision :: tsize integer :: JQN integer, parameter :: NUMPAR = 30, NUMFLD = 2*NUMPAR INTEGER IX(NUMFLD),IY(NUMFLD),IS(NUMFLD),IT(NUMFLD) CHARACTER WRDKEY*40, OPTION(NUMPAR)*40, HELPM(NUMPAR)*60 COMMON /HELPNOW/ WRDKEY,NLEVEL COMMON /DEPMAX/ VMAX,VMIN,DV,VAL(256),NCOLS(256),NV,NIS,NIE,JAAUTO COMMON /TEXTSIZE/ TSIZE COMMON /SCREENAREA/ XLEFT,YBOT,JAXIS COMMON /HARDCOPY/ NHCDEV,NUMHCOPTS,IHCOPTS(2,20) COMMON /SCALEPOS/ XSC,YSC,SCALESIZE,NDEC COMMON /VFAC/ VFAC,VFACFORCE,NVEC COMMON /ARCINFO/ DX, DY, X0, Y0, RMISS, DXSHOW, XD COMMON /DRAWTHIS/ NDRAW(40) COMMON /QNRGF/ JQN double precision :: VS(4,4) integer, external :: infoinput external :: highlight_form_line ! NLEVEL = 3 OPTION(1) = 'HARDCOPY DRIVER NUMBER ' ; IT(2*1) = 2 OPTION(2) = 'ENCAPSULATED POSTSCRIPT ' ; IT(2*2) = 2 OPTION(3) = 'LANDSCAPE ' ; IT(2*3) = 2 OPTION(4) = 'SIZE OF DOTS ' ; IT(2*4) = 6 OPTION(5) = 'SIZE OF NUMBERS ' ; IT(2*5) = 6 OPTION(6) = 'DEFAULT VALUE ' ; IT(2*6) = 6 OPTION(7) = 'LEFT SCREEN MARGIN ' ; IT(2*7) = 6 OPTION(8) = 'BOTTOM SCREEN MARGIN ' ; IT(2*8) = 6 OPTION(9) = 'PLOTTING AXIS YES/NO ' ; IT(2*9) = 2 OPTION(10)= 'SCALEFACTOR FOR VECTORS ' ; IT(2*10) = 6 OPTION(11)= 'VECTOR INTERVAL ' ; IT(2*11) = 2 OPTION(12)= 'PLOTTING INTERVAL NTEK ' ; IT(2*12) = 2 OPTION(13)= 'PLOT TO FILE YES/NO ' ; IT(2*13) = 2 OPTION(14)= 'MINIMUM ZLEVEL RAAITEK ' ; IT(2*14) = 6 OPTION(15)= 'MAXIMUM ZLEVEL RAAITEK ' ; IT(2*15) = 6 OPTION(16)= 'PLOT TOP ROWS INFORMATION TEXT ' ; IT(2*16) = 2 OPTION(17)= 'Number of zoomshift intervals, press ; ' ; IT(2*17) = 2 OPTION(18)= 'Enable/disable minmax highlighting ' ; IT(2*18) = 2 OPTION(19)= 'Highlight specific net node number ' ; IT(2*19) = 2 OPTION(20)= 'Highlight specific net link number ' ; IT(2*20) = 2 OPTION(21)= 'Highlight specific flow node number ' ; IT(2*21) = 2 OPTION(22)= 'Highlight specific flow link number ' ; IT(2*22) = 2 OPTION(23)= 'Node waterdepth plotting threshold ' ; IT(2*23) = 6 OPTION(24)= 'Plot sideview in cheap perspective 1/0 ' ; IT(2*24) = 6 OPTION(25)= 'Grain size fraction nr to plot ' ; IT(2*25) = 2 OPTION(26)= 'Show vertical reference profiles 1/0 ' ; IT(2*26) = 2 OPTION(27)= 'display flownodes minus plotlin: 1 ' ; IT(2*27) = 2 OPTION(28)= ' ' ; IT(2*28) = 2 OPTION(29)= 'use OpenGL (0:no, 1:yes) ' ; IT(2*29) = 2 OPTION(30)= 'show bathymetry (0:no, 1:yes) ' ; IT(2*30) = 2 ! 123456789012345678901234567890123456789012345678901234567890 ! 1 2 3 4 5 6 HELPM (1) = & '1:hgl 2:ps 4:rgh 6:bmp 7:pcx 8:dxf 9:cgm 10:wpm 11:wmf 12gl2' HELPM (2) = & '1 = ENCAPSULATED POSTSCRIPT (eps), 0 = POSTSCRIPT (ps) ' HELPM (3) = & '1 = LANDSCAPE, 0 = PORTRAIT ' HELPM (4 ) = & 'REAL VALUE, SIZE OF DOTS RELATIVE TO SCREENSIZE ' HELPM (5 ) = & 'REAL VALUE, SIZE OF NUMBERS, STANDARD VALUE 0.5 ' HELPM (6 ) = & 'REAL VALUE, FOR MISSING POINTS (PARAMETER dmiss) ' HELPM (7 ) = & 'REAL VALUE, LEFT MARGIN AS FRACTION SCREEN SIZE (0.0-0.25) ' HELPM (8 ) = & 'REAL VALUE, BOTTOM MARGIN AS FRACTION OF SCREEN (0.0-0.25) ' HELPM (9 ) = & 'PLOT AXIS, 1 = YES, 0 = NO ' HELPM (10) = & 'REAL VALUE, 2 MEANS 1 CM ON SCREEN IS APPROXIMATELY 2 M/S ' HELPM (11) = & '1= plot every vector, 2=plot every second vector etc. ' HELPM (12) = & 'INTEGER PLOTTING INTERVAL ' HELPM (13) = & 'PLOT TO FILE AFTER EACH NTEK, 1 = YES, 0 = NO ' HELPM (14) = & 'IF -999, AUTO ADJUST TO BOTTOM ' HELPM (15) = & 'IF -999, AUTO ADJUST TO ZNOD ' HELPM (16) = & '1 = YES, 0 = NO ' HELPM (17) = & 'press ;key in editpol with polygon present after zooming in ' HELPM (18) = & 'Enable/disable highlighting of nodes/links/nodmin. (1/0) ' HELPM (19) = & 'Number of the net node to be highlighted. ' HELPM (20) = & 'Number of the net link to be highlighted. ' HELPM (21) = & 'Number of the flow node to be highlighted. ' HELPM (22) = & 'Number of the flow link to be highlighted. ' HELPM (23) = & 'Only plot node if waterdepth hs > wetplot ' HELPM (24) = & 'Plot raai with cheap perspective 1/0 ' HELPM (25) = & 'Integer, <= mxgr ' HELPM (26) = & '1=yes , 0=no , only for 3D ' HELPM (27) = & '1=yes , 0=no ' HELPM (28) = & 'Intentionally left blank ' HELPM (29) = & '1=yes , 0=no ' HELPM (30) = & '1=yes , 0=no ' NUMPARACTUAL = NUMPAR NUMFLDACTUAL = 2*NUMPARACTUAL IR = 0 DO I = 1,NUMPAR IL = IR + 1 IR = IL + 1 IX(IL) = 13 ! IX(IR) = 53 IX(IR) = 95 IY(IL) = I ! Many menu lines, use dense view to fit on screen. IY(IR) = I ! IS(IL) = 40 IS(IL) = 82 IS(IR) = 10 IT(IL) = 1001 ENDDO ! Initialise CALL IWinWordWrap('OFF') CALL ITEXTCOLOURN(HLPFOR, HLPBCK) CALL INHIGHLIGHT('WHITE','RED') IW = NPOS(3) IXP = NPOS(1) + (IWS-IW)/2 IYP = NPOS(2) IH = IHS - 9 ! Header of filewindow CALL IWinAction('FPC') CALL IWinOpen(IXP,IYP,IW,1) CALL ITEXTCOLOURN(LBLFOR,LBLBCK) CALL IWinOutCentre(1,trim(unstruc_company)//'-'//trim(unstruc_program)//' DISPLAY PARAMETER FORM') CALL ITEXTCOLOURN(HLPFOR,HLPBCK) ! ! Explain keyfunctions in bottom window CALL IWinAction('FPC') CALL IWinOpen(IXP,IHS-1,IW,2) CALL IWinOutStringXY(1,1,'move = , Tab, confirm = Enter, no change = Esc, help = F3') CALL IWinOutStringXY(1,2,'right mouse = Enter, click outside window = Esc') ! Filewindow is middelste window CALL IWinAction('FPC') CALL IWinOpen(IXP,IYP+3,IW,IH) CALL InControlKey(29,129) CALL InControlKey(30,128) ! NUMWNH = InfoWindow(1) ! CALL IWinSelect(NUMWNH) ! Define a new form by supplying arrays containing ! field positions, sizes and types CALL IFORMDEFINE('W',NUMFLDACTUAL,IX,IY,IS,IT) ! Define a help field and define help strings ! for 2 of the 4 input fields CALL IFORMHELP(13,IH,60) IR = 0 DO I = 1,NUMPARACTUAL IL = IR + 1 IR = IL + 1 CALL IFORMPUTSTRING (IL,OPTION(I)) CALL IFORMPUTHELP (IR,HELPM(I)) CALL IFORMATTRIBUTEN(IR,0,0,7) ENDDO DO I = 1,NUMHCOPTs IF (IHCOPTS(1,I) .EQ. 22) JAEPS = IHCOPTS(2,I) IF (IHCOPTS(1,I) .EQ. 5) JALAND = IHCOPTS(2,I) ENDDO CALL IFORMPUTINTEGER(2*1 , NHCDEV) CALL IFORMPUTINTEGER(2*2 , JAEPS) CALL IFORMPUTINTEGER(2*3 , JALAND) CALL IFormPutDouble (2*4 , CR ,'(F10.3)') CALL IFormPutDouble (2*5 , TSIZE ,'(F10.3)') CALL IFormPutDouble (2*6 , dmiss,'(F10.3)') CALL IFormPutDouble (2*7 , XLEFT,'(F10.3)') CALL IFormPutDouble (2*8 , YBOT ,'(F10.3)') CALL IFORMPUTINTEGER(2*9 , JAXIS) CALL IFormPutDouble (2*10, VFAC ,'(F10.3)') CALL IFormPutinteger(2*11, nvec) CALL IFORMPUTINTEGER(2*12, NTEK) CALL IFORMPUTINTEGER(2*13, PLOTTOFILE) CALL IFormPutDouble (2*14, ZMINrai ,'(F10.3)') CALL IFormPutDouble (2*15, ZMAXrai ,'(F10.3)') CALL IFORMPUTINTEGER(2*16, JTEXTFLOW) CALL IFORMPUTINTEGER(2*17, numzoomshift) CALL IFORMPUTINTEGER(2*18, jaHighlight) CALL IFORMPUTINTEGER(2*19, nhlNetNode) CALL IFORMPUTINTEGER(2*20, nhlNetLink) CALL IFORMPUTINTEGER(2*21, nhlFlowNode) CALL IFORMPUTINTEGER(2*22, nhlFlowLink) CALL IFormPutDouble (2*23, wetplot,'(F10.5)') CALL IFormPutDouble (2*24, YFAC,'(F10.5)') CALL IFORMPUTINTEGER(2*25, jgrtek) ! grain size fraction to plot CALL IFORMPUTINTEGER(2*26, ndraw(35)) ! 1/0 CALL IFORMPUTINTEGER(2*27, ndraw(36)) ! 1/0 CALL IFORMPUTINTEGER(2*29, jaOpenGL) ! 1/0 CALL IFORMPUTINTEGER(2*30, ndraw(39)) ! 1/0 ! Display the form with numeric fields left justified ! and set the initial field to number 2 CALL IOUTJUSTIFYNUM('L') IFEXIT = 2 call IFormAttribute(IFEXIT-1, 'BU', ' ', ' ') CALL IFORMSHOW() 30 CONTINUE IFINIT = IFEXIT CALL IFormEditUser(IFINIT, IFEXIT, highlight_form_line) ! check for Help, Confirm, Quit KEY = INFOINPUT(55) IF (KEY .EQ. -2) THEN NBUT = INFOINPUT(61) IF (NBUT .GE. 1) THEN IMP = INFOINPUT(62) + 1 INP = INFOINPUT(63) + 1 IF (IMP .GE. IXP .AND. IMP .LT. IXP+IW .AND. & INP .GE. IYP+3 .AND. INP .LT. IYP+IH+3+2 ) THEN IF (NBUT .EQ. 1) THEN KEY = 21 ELSE KEY = 22 ENDIF ELSE KEY = 23 ENDIF ENDIF ELSE IF (KEY .EQ. -1) THEN KEY = INFOINPUT(57) ENDIF IF (KEY .EQ. 26) THEN WRDKEY = OPTION(IFEXIT/2) CALL HELP(WRDKEY,NLEVEL) ELSE IF (KEY .EQ. 22 .OR. KEY .EQ. 23) THEN IF (KEY .EQ. 22) THEN CALL IFORMGETINTEGER(2*1 , NHCDEV) CALL IFORMGETINTEGER(2*2 , JAEPS) CALL IFORMGETINTEGER(2*3 , JALAND) CALL IFormGetDouble (2*4 , CR) CALL IFormGetDouble (2*5 , TSIZE) CALL IFormGetDouble (2*6 , dmiss) CALL IFormGetDouble (2*7 , XLEFT) CALL IFormGetDouble (2*8 , YBOT ) CALL IFORMGETINTEGER(2*9 , JAXIS) CALL IFormGetDouble (2*10, VFAC ) CALL IFormGetinteger(2*11, nvec ) CALL IFORMGETINTEGER(2*12, NTEK) CALL IFORMGETINTEGER(2*13, PLOTTOFILE) CALL IFormGetDouble (2*14, ZMINrai) CALL IFormGetDouble (2*15, ZMAXrai) CALL IFORMGETINTEGER(2*16, jtextflow) CALL IFORMGETINTEGER(2*17, numzoomshift) CALL IFORMGETINTEGER(2*18, jaHighlight) CALL IFORMGETINTEGER(2*19, nhlNetNode) CALL IFORMGETINTEGER(2*20, nhlNetLink) CALL IFORMGETINTEGER(2*21, nhlFlowNode) CALL IFORMGETINTEGER(2*22, nhlFlowLink) CALL IFormGetDouble (2*23, wetplot) CALL IFormGetDouble (2*24, yfac) CALL IFORMGETINTEGER(2*25, jgrtek ) jgrtek = max(1,min(jgrtek,mxgr)) CALL IFORMGETINTEGER(2*26, ndraw(35) ) CALL IFORMGETINTEGER(2*27, ndraw(36) ) CALL IFORMGETINTEGER(2*29, jaOpenGL ) CALL IFORMGETINTEGER(2*30, ndraw(39) ) RCIR = CR*(X2 - X1) VFAC = MAX( 0d0, VFAC) VFACFORCE = MAX( 0d0, VFACFORCE) XLEFT = MAX( 0d0,(MIN(XLEFT,0.25d0) ) ) YBOT = MAX( 0d0,(MIN(YBOT ,0.25d0) ) ) JAXIS = MIN( 1 ,(MAX(JAXIS,0) ) ) IF (JAXIS .EQ. 1) THEN IF (XLEFT .EQ. 0) XLEFT = .15 IF (YBOT .EQ. 0) YBOT = .10 ENDIF !CALL NEWWORLD() call setwor(x1,y1,x2,y2) DO I = 1,NUMHCOPTS IF (IHCOPTS(1,I) .EQ. 22) IHCOPTS(2,I) = JAEPS IF (IHCOPTS(1,I) .EQ. 5) IHCOPTS(2,I) = JALAND ENDDO CALL SETTEXTSIZE() if (plottofile == 1) then ndraw(10) = 1 end if ENDIF CALL IWinClose(1) CALL IWinClose(1) CALL IWinClose(1) RETURN ELSE IF (KEY .EQ. 21) THEN IF (IFEXIT .EQ. 1 .OR. IFEXIT .EQ. 3) THEN WRDKEY = HELPM(IFEXIT) CALL HELP(WRDKEY,NLEVEL) ENDIF ENDIF GOTO 30 END SUBROUTINE CHANGEDISPLAYPARAMETERS SUBROUTINE KPLOTPLUSMIN(IPM) USE M_FLOWGEOM USE M_FLOW implicit none integer :: IPM, NRLAY if (kmx < 1) return NRLAY = KTOP(NPLOT) - KBOT(NPLOT) + 1 IF (IPM > 0) THEN IF (KPLOT < NRLAY ) THEN KPLOT = KPLOT+1 ELSE KPLOT = 1 ENDIF ELSE IF (KPLOT > 1 ) THEN KPLOT = KPLOT-1 ELSE KPLOT = NRLAY ENDIF ENDIF CALL TEXTFLOW() END SUBROUTINE KPLOTPLUSMIN SUBROUTINE nPLOTPLUSMIN(IPM) USE M_FLOW use M_flowgeom implicit none integer :: IPM, NRLAY IF (IPM == 1) THEN ! nPLOT = MIN(nPLOT+1,ndx) nplot = nplot+1 if ( nplot.gt.Ndx ) nplot = nplot - Ndx ELSE if (ipm == -1) then ! nPLOT = MAX(nPLOT-1,1) nplot = nplot-1 if ( nplot.lt.1 ) nplot = nplot + Ndx else nplot = ipm ENDIF if (kmx > 0) then NRLAY = KTOP(NPLOT) - KBOT(NPLOT) + 1 KPLOT = MAX(1, MIN(KPLOT, NRLAY) ) endif CALL TEXTFLOW() END SUBROUTINE nPLOTPLUSMIN SUBROUTINE EDITSAM(MODE,KEY) use m_samples USE M_MISSING use unstruc_colors use m_partitioninfo implicit none integer :: MODE, KEY double precision :: ddx integer :: jalinear integer :: jaspline integer :: jonce integer :: k, L1, L2 integer :: newmode integer :: nlevel integer :: nput integer :: num integer :: numb integer :: numinp integer :: nwhat double precision :: ziso double precision :: ziso2 double precision :: vmax2, vmin2, dv2, val2, ave integer :: ncols2, nv2, nis2, nie2, jaauto2, ierror COMMON /DEPMAX2/ VMAX2,VMIN2,DV2,VAL2(256),NCOLS2(256),NV2,NIS2,NIE2,JAAUTO2 integer :: ndraw COMMON /DRAWTHIS/ NDRAW(40) double precision :: xp, yp, rd integer :: mp, mps COMMON /HELPNOW/ WRDKEY,NLEVEL COMMON /ISOPOL/ ZISO,ZISO2,DDX,NUMINP,JASPLINE,JALINEAR CHARACTER TEX*26, WRDKEY*40 TEX = ' Edit Samples ' WRDKEY = TEX NLEVEL = 2 NUM = 0 NWHAT = 0 NPUT = 25 NUMB = 12 MP = 0 MPS = MP L1 = 0 CALL SAVESAM() ! user is editing samples: mark samples as unstructured ! MXSAM = 0 ! MYSAM = 0 ! IPSTAT = IPSTAT_NOTOK 10 CONTINUE CALL DRAWNU(KEY) CALL KTEXT(TEX,1,2,15) CALL putget_un(NUM,NWHAT,NPUT,NUMB,XP,YP,KEY) IF (KEY .NE. 23) JONCE = 0 IF (NUM .NE. 0) THEN ! ER IS EEN KEUZE IF (NUM .EQ. 4) THEN MODE = NWHAT RETURN ELSE CALL CHOICES(MODE,NUM,NWHAT,KEY) ENDIF ELSE IF (KEY >= 577) THEN ! Alt+letter switches edit mode. call selecteditmode(newmode, key) if (newmode > 0 .and. newmode /= mode) then mode = newmode return end if ELSE IF (KEY .EQ. 21) THEN ! INS KEY MPS = MP CALL SAVESAM() IF (NPUT .EQ. 23 .OR. NPUT .EQ. 26 .OR. NPUT .EQ. 27 .or. & NPUT .EQ. 40 .OR. NPUT .EQ. 41 .or. NPUT .EQ. 49 .or. & NPUT .EQ. 50 .or. NPUT .EQ. 51 ) THEN ! kijken welk punt bij deleten en bij oppakken, changen CALL ISPOI1( XS, YS, NS, XP, YP, MP) ENDIF IF ( NPUT .EQ. 23 .AND. MP .NE. 0) THEN ! punt oppakken CALL CIRR(XP,YP,0) NPUT = 24 ELSE IF (NPUT .EQ. 24 .AND. MP .NE. 0) THEN ! punt neerzetten XS(MP) = XP YS(MP) = YP CALL KCIR(XP,YP,ZS(MP)) NPUT = 23 ELSE IF (NPUT .EQ. 25) THEN ! punt toevoegen CALL INCREASESAM(NS) IF (NS .GE. 1) THEN RD = ZS(NS) ELSE RD = ZISO ENDIF ! CALL TYPEVALUE(RD,KEY) NS = NS + 1 XS(NS) = XP YS(NS) = YP ZS(NS) = RD CALL KCIR(XP,YP,ZS(NS)) ! user is editing samples: mark samples as unstructured MXSAM = 0 MYSAM = 0 IPSTAT = IPSTAT_NOTOK ELSE IF ( NPUT .EQ. 26 .AND. MP .NE. 0) THEN ! punt deleten CALL CIRR(XP,YP,0) DO 30 K = MP,NS XS(K) = XS(K+1) YS(K) = YS(K+1) ZS(K) = ZS(K+1) 30 CONTINUE NS = NS - 1 ! user is editing samples: mark samples as unstructured MXSAM = 0 MYSAM = 0 IPSTAT = IPSTAT_NOTOK ELSE IF ( NPUT .EQ. 27 .AND. MP .NE. 0) THEN ! punt in waarde veranderen RD = ZS(MP) CALL TYPEVALUE(RD,KEY) CALL KCIR(XP,YP,RD) ZS(MP) = RD ELSE IF ( NPUT == 40 .OR. NPUT == 41) THEN IF (MP .NE. 0) THEN IF (L1 == 0) THEN L1 = MP NPUT = 41 ELSE L2 = MP NPUT = 40 CALL insertsamples(L1,L2) L1 = 0 L2 = 0 KEY = 3 ENDIF ENDIF ELSE IF ( NPUT .EQ. 49 ) THEN ! Click sample point to set min value for isocol2 KEY = 3 if (MP == 0) then ! Miss click: reset iscol2 scaling to auto. jaauto2 = 1 else vmin2 = ZS(MP) jaauto2 = 0 if (vmin2 > vmax2) then key = 0 end if end if call minmxsam() ELSE IF ( NPUT .EQ. 50 ) THEN ! Click sample point to set max value for isocol2 KEY = 3 if (MP == 0) then ! Miss click: reset iscol2 scaling to auto. jaauto2 = 1 else vmax2 = ZS(MP) jaauto2 = 0 if (vmin2 > vmax2) then key = 0 end if end if call minmxsam() ELSE IF ( NPUT .EQ. 58 ) THEN ! Click start point of sample-based polygon call make_samplepath(xp,yp) ENDIF ELSE IF (KEY .EQ. 22) THEN ! ENTER KEY ELSE IF (KEY .EQ. 23) THEN ! ESC MP = MPS CALL RESTORESAM() KEY = 3 ELSE IF (KEY .EQ. 27) THEN ! TAB CALL ISPOI1( XS, YS, NS, XP, YP, MP) IF (MP .NE. 0) THEN RD = ZS(MP) MPS = MP CALL SAVESAM() CALL CHADEP(XP,YP,RD,KEY) ZS(MP) = RD ENDIF ELSE IF (KEY .EQ. 73 .OR. KEY .EQ. 73+32) THEN ! I ! insert mode NPUT = 25 ELSE IF (KEY .EQ. 8) THEN ! Backspace KEY ! delete all samples (within polygon if any) and stay in previous mode. call savesam() call delsam(1) key = 3 ! user is editing samples: mark samples as unstructured MXSAM = 0 MYSAM = 0 IPSTAT=IPSTAT_NOTOK ELSE IF (KEY .EQ. 68 .OR. KEY .EQ. 68+32) THEN ! D ! delete mode NPUT = 26 ELSE IF (KEY .EQ. 70 .OR. KEY .EQ. 70+32) THEN ! f CALL SAVESAM() ns = 10 call increasesam(ns) xs(1) = xp ys(1) = yp CALL TYPEVALUE(RD,KEY) zs(1) = rd NS = 1 call flow_initfloodfill() call restoresam() key = 3 ELSE IF (KEY .EQ. 82 .OR. KEY .EQ. 82+32 .AND. NPUT .NE. 24) THEN ! R ! replace mode, maar niet bij zetten NPUT = 23 ELSE IF (KEY .EQ. 76 .OR. KEY .EQ. 76+32) THEN ! L ! line mode NPUT = 40 ELSE IF (KEY .EQ. 67 .OR. KEY .EQ. 67+32) THEN ! C ! change mode NPUT = 27 ELSE IF ( KEY .EQ. 77+32) THEN ! m (case sensitive!) ! click sample to set minimum for isocol2 NPUT = 49 ELSE IF (KEY .EQ. 77 ) THEN ! M (case sensitive!) ! click sample to set maximum for isocol2 NPUT = 50 ELSE IF (KEY .EQ. 72 .OR. KEY .EQ. 72+32) THEN ! H: hide/show samples ! click sample to set maximum for isocol2 ndraw(32) = -ndraw(32) key = 3 ELSE IF (KEY .EQ. 98) THEN ! b RINGS BELL CALL KTEXT('B Rings Bell',2,6,11) CALL OKAY(0) ELSE IF (KEY .EQ. 81 .or. KEY .EQ. 81+32 ) THEN ! Q (for testing only) ! call make_orthocenters(0.5d-2,1000) ! call copy_sendlist_to_sam() NPUT = 58 ENDIF GOTO 10 END SUBROUTINE EDITSAM SUBROUTINE EDITNETW(MODE,KEY) use m_netw use unstruc_colors USE M_MISSING use unstruc_api use dfm_error use unstruc_messages implicit none integer :: MODE, KEY double precision :: ag double precision :: cfl double precision :: e0 double precision :: eps integer :: newmode integer :: ja integer :: jadd integer :: k integer :: k1, k2, k3 integer :: kp integer :: kpp integer :: LL integer :: lnu integer :: ncol integer :: nl1 integer :: nl2 integer :: nlevel integer :: nput integer :: num integer :: numb integer :: nwhat integer :: ierror double precision :: pi double precision :: rho double precision :: rhow double precision :: xp1 double precision :: yp1 double precision :: zp1 double precision :: xp, yp, zp, ZPP COMMON /HELPNOW/ WRDKEY,NLEVEL COMMON /CONSTANTS/ E0, RHO, RHOW, CFL, EPS, AG, PI CHARACTER TEX*26, WRDKEY*40 integer :: iresult TEX = ' Edit Network ' WRDKEY = TEX NLEVEL = 2 NUM = 0 JA = 0 NWHAT = 0 NPUT = 0 NUMB = 10 JADD = 2 NCOL = NCOLDN K1 = 0 KPP = 0 CALL SAVE() K = 0 CALL BOTLIN(0,NUMB,KEY) 10 CONTINUE CALL DRAWNU(KEY) CALL KTEXT(TEX,1,2,15) IF (JADD .EQ. 0) THEN CALL KTEXT(' DELETE NODES ',1,3,15) ! D ELSE IF (JADD .EQ. 1) THEN CALL KTEXT(' ADD NODES/ELMS ',1,3,15) ! I ELSE IF (JADD .EQ. 2) THEN CALL KTEXT(' REPLACE NODES ',1,3,15) ! R ELSE IF (JADD .EQ. 3) THEN CALL KTEXT(' MERGE NODES ',1,3,15) ! M ELSE IF (JADD .EQ. 4) THEN CALL KTEXT(' MERGE LINES ',1,3,15) ! O ELSE IF (JADD .EQ. 5) THEN CALL KTEXT(' CUT LINES ',1,3,15) ! C ELSE IF (JADD .EQ. 6) THEN CALL KTEXT(' DEL ND, LINK L/R ',1,3,15) ! X ELSE IF (JADD .EQ. 7) THEN CALL KTEXT(' Toggle thin dam (LINKS) ',1,3,15) ! T ELSE IF (JADD .EQ. 8) THEN CALL KTEXT(' Split LINES ',1,3,15) ! S ELSE IF (JADD .EQ. 88) THEN CALL KTEXT(' Insert meshline ',1,3,15) ! SHIFT-S ELSE IF (JADD .EQ. 9) THEN CALL KTEXT(' Toggle line attribute ',1,3,15) ! 1 ELSE IF (JADD .EQ. 10) THEN CALL KTEXT(' FIELD MOVE ',1,3,15) ! V ELSE IF (JADD .EQ. 11) THEN CALL KTEXT(' FIELD ROTATE ',1,3,15) ! R ELSE IF (JADD .EQ. 12) THEN CALL KTEXT(' ZKNODES ',1,3,15) ! + ELSE IF (JADD .EQ. 13) THEN CALL KTEXT(' TO LAND BOUNDARY ',1,3,15) ! L ELSE IF (JADD .EQ. 14) THEN CALL KTEXT(' KILL CELL ',1,3,15) ! K ELSE IF (JADD .eq. 15) THEN CALL KTEXT(' ADD CELL LAYER ',1,3,15) ! E ENDIF CALL putget_un(NUM,NWHAT,NPUT,NUMB,XP,YP,KEY) CALL SETCOL(NCOLDN) IF (NUM .NE. 0) THEN ! ER IS EEN KEUZE IF (NUM .EQ. 4) THEN MODE = NWHAT RETURN ELSE CALL CHOICES(MODE,NUM,NWHAT,KEY) ENDIF ELSE IF (KEY >= 577) THEN ! Alt+letter switches edit mode. call selecteditmode(newmode, key) if (newmode > 0 .and. newmode /= mode) then mode = newmode return end if ELSE IF (KEY .EQ. 21) THEN ! INS KEY OF LINKERMUIS, kijken welk punt CALL ISNODE(KP, XP, YP, ZP) CALL SAVE() IF (JADD .EQ. 1) THEN ! insert mode netstat = NETSTAT_CELLS_DIRTY IF (KP .EQ. 0) THEN ! CALL GIVENEWNODENUM(KP) CALL SETNEWPOINT(XP,YP,ZP,KP) ELSE CALL DCIRR (XK(KP),YK(KP),ZK(KP),NCOLDN) ENDIF IF (K1 .NE. 0) THEN CALL CONNECTDBN(K1,KP,LNU) CALL TEKLINK(LNU,NCOLDN) ! CALL DMOVABS(XK(K1),YK(K1),ZK(K1)) ! CALL DLNABS(XK(KP),YK(KP),ZK(KP)) ENDIF K1 = KP NPUT = 39 ELSE IF (JADD .EQ. 2) THEN !replace mode netstat = NETSTAT_CELLS_DIRTY IF (KP .NE. 0 .AND. NPUT .EQ.0 ) THEN NPUT = 1 KPP = KP ZPP = ZP CALL TEKNODE(KP,0) ELSE IF (KPP .NE. 0) THEN NPUT = 0 CALL SAVE() CALL SETPOINT(XP,YP,ZPP,KPP) CALL TEKNODE(KPP,NCOLDN) KPP = 0 ENDIF ELSE IF (JADD .EQ. 3) THEN ! MERGE NODES netstat = NETSTAT_CELLS_DIRTY IF (KP .NE. 0) THEN ! IF ( K1 .EQ. 0 ) THEN ! punt 1 K1 = KP KP = -KP ! FLAG TO ISNODE; DO NOT AGAIN LOOK FOR THIS POINT XP1 = XP YP1 = YP ZP1 = ZP CALL DCIRR (XK(K1),YK(K1),ZK(K1),NCOLDN) NPUT = 39 ELSE ! punt 2 K2 = KP CALL DCIRR (XK(K1),YK(K1),ZK(K1),0 ) CALL TEKNODE(K1,0) CALL SAVE() CALL MERGENODES(K1,K2,JA) CALL TEKNODE(K2,NCOLDN) K1 = 0 K2 = 0 NPUT = 38 ENDIF ELSE ! NO FIND CALL OKAY(0) ENDIF ELSE IF (JADD .EQ. 5 .and. kp .ne. 0) THEN ! C - key now free for change ZK value zp1 = Zk(kP) CALL TYPEVALUE(zp1,KEY) CALL KCIR(XP,YP,zp1) Zk(kP) = zp1 ELSE IF (JADD .EQ. 6) THEN ! DELETE NODE, CONNECT LEFT/RIGHT netstat = NETSTAT_CELLS_DIRTY IF (KP .NE. 0) THEN ! CUT LINE IF (NMK(KP) .EQ. 2) THEN ! punt 1 CALL TEKNODE(KP,0) NL1 = NOD(KP)%LIN(1) CALL TEKLINK(NL1,0) CALL OTHERNODE(KP,NL1,K1) NL2 = NOD(KP)%LIN(2) CALL TEKLINK(NL2,0) CALL OTHERNODE(KP,NL2,K2) CALL CONNECTDBN(K1,K2,LNU) CALL TEKLINK (LNU,NCOLDN) CALL DELLINK(NL1) CALL DELLINK(NL2) NPUT = 0 ENDIF ELSE ! NO FIND CALL OKAY(0) ENDIF ELSE IF (JADD .EQ. 0) THEN !delete mode netstat = NETSTAT_CELLS_DIRTY IF (KP .NE. 0) THEN CALL TEKNODE(KP,0) CALL SAVE() CALL DELNODE(KP) ELSE CALL ISLINK(LL, XP, YP, ZP) IF (LL .NE. 0) THEN CALL TEKLINK(LL,0) CALL DELLINK(LL) ENDIF ENDIF ELSE IF (JADD .EQ. 7) THEN ! thin dam toggle mode IF (KP == 0) THEN CALL ISLINK(LL, XP, YP, ZP) IF (LL /= 0) THEN KN(3,LL) = -KN(3,LL) CALL TEKLINK(LL,NCOLDN) ENDIF ENDIF ELSE IF (JADD .EQ. 8) THEN ! split line IF (KP == 0) THEN call splitlink(xp, yp, 0, 0.9d0, 1, ierror) ! use (xp,yp) and no link specified, use cos parallelogram tolerance and plot ENDIF ELSE IF (JADD .EQ. 88) THEN ! insert meshline IF (KP == 0) THEN call insert_netline(xp, yp, 0) ! , 1) ENDIF ELSE IF (JADD .EQ. 9) THEN ! line attribute TOGGLE , 1d OR 2d IF (KP == 0) THEN CALL ISLINK(LL, XP, YP, ZP) IF (LL /= 0) THEN IF ( kn(3,LL) == 2) THEN CALL TEKLINK(LL,221) kn(3,LL) = 1 ELSE IF ( kn(3,LL) == 1) THEN CALL TEKLINK(LL,3) kn(3,LL) = 2 ENDIF ENDIF ENDIF ELSE IF (JADD .EQ. 10) THEN ! Field move IF (KP .NE. 0 .AND. NPUT .EQ.0 ) THEN NPUT = 1 KPP = KP ZPP = ZP CALL TEKNODE(KP,0) ELSE IF (KPP .NE. 0) THEN CALL SAVE() CALL TEKNODE(KPP,NCOLDN) call netmodfld(xp,yp,zpp,kpp) NPUT = 0 kpp = 0 KEY = 3 ENDIF ELSE IF (JADD .EQ. 11) THEN ! Field rotate IF (KP .NE. 0 .AND. NPUT .EQ.0 ) THEN NPUT = 1 KPP = KP ZPP = ZP CALL TEKNODE(KP,0) ELSE IF (KPP .NE. 0) THEN CALL SAVE() CALL TEKNODE(KPP,NCOLDN) call netrotfld(xp,yp,zpp,kpp) NPUT = 0 kpp = 0 KEY = 3 ENDIF ELSE IF (JADD .EQ. 12) THEN ! Field rotate IF (KP .NE. 0) THEN ! punt in waarde veranderen CALL TYPEVALUE(ZP,KEY) CALL KCIR(XP,YP,ZP) ZK(KP) = ZP ENDIF ELSE IF (JADD .EQ. 15 ) THEN ! Add cell layer IF (KP .NE. 0) THEN call netboundtocurvi(kp) KEY = 3 ENDIF ENDIF ELSE IF (KEY .EQ. 22) THEN ! ENTER KEY ENKEL DISPLAY CALL ISNODE(KP, XP, YP, ZP) IF (KP .NE. 0) THEN CALL DISPNODEVALS(KP) ELSE iresult = FLOW() if (iresult == DFM_SIGINT) then call mess(LEVEL_ERROR, 'Final handling of SIGINT signal. Stopping program.') call STOPINT() else if (iresult /= DFM_NOERR) then call qnerror('Error occurred while running, please inspect your diagnostic output.',' ', ' ') end if ENDIF ELSE IF (KEY .EQ. 23) THEN ! ESCAPE KEY CALL RESTORE() KEY = 3 ELSE IF (KEY .EQ. 27) THEN ! TAB ELSE IF (KEY .EQ. 73 .OR. KEY .EQ. 73+32) THEN ! I-key JADD = 1 K1 = 0 K2 = 0 NPUT = 38 ELSE IF (KEY .EQ. 8) THEN ! Backspace KEY ! delete entire network (within polygon if any) and stay in previous mode. call delnet(key,0, 1) K1 = 0 K2 = 0 key = 3 ELSE IF (KEY .EQ. 68 .OR. KEY .EQ. 68+32) THEN ! D-key ! delete mode JADD = 0 K1 = 0 K2 = 0 NPUT = -2 ELSE IF (KEY .EQ. 82 .OR. KEY .EQ. 82+32) THEN ! R-key ! replace mode, maar niet bij zetten JADD = 2 K1 = 0 K2 = 0 NPUT = 0 ELSE IF (KEY .EQ. 88 .OR. KEY .EQ. 88+32) THEN ! X-key ! DELNODE, CONNECT LEFT/RIGHT JADD = 6 K1 = 0 K2 = 0 NPUT = -2 ELSE IF (KEY .EQ. 77 .OR. KEY .EQ. 77+32) THEN ! M-key MERGE JADD = 3 K1 = 0 K2 = 0 NPUT = 38 ELSE IF (KEY .EQ. 99 .OR. KEY .EQ. 99+32) THEN ! C-key Change ZK value JADD = 5 K1 = 0 NPUT = 60 ELSE IF (KEY .EQ. 33 .or. KEY .EQ. 49) THEN ! SHIFT-1 CALL ISLINK(LL, XP, YP, ZP) IF (LL /= 0) THEN kn(3,LL) = 1 CALL TEKLINK(LL,1) ENDIF!123 ELSE IF (KEY .EQ. 34 .or. KEY .EQ. 50) THEN ! SHIFT-2 CALL ISLINK(LL, XP, YP, ZP) IF (LL /= 0) THEN kn(3,LL) = 2 CALL TEKLINK(LL,1) ENDIF ELSE IF (KEY .EQ. 35 .or. KEY .EQ. 51) THEN ! SHIFT-3 CALL ISLINK(LL, XP, YP, ZP) IF (LL /= 0) THEN kn(3,LL) = 3 CALL TEKLINK(LL,1) ENDIF ELSE IF (KEY .EQ. 71 .OR. KEY .EQ. 71+32) THEN ! G-key netw2curv CALL NETW2CURV(XP,YP) KEY = 3 ELSE IF (KEY .EQ. 86 .OR. KEY .EQ. 86+32) THEN ! V-key fieldmove JADD = 10 K1 = 0 K2 = 0 NPUT = 0 ELSE IF (KEY .EQ. 66 .OR. KEY .EQ. 66+32) THEN ! B-key fieldrotate JADD = 11 K1 = 0 K2 = 0 NPUT = 0 ELSE IF (KEY .EQ. 76 .OR. KEY .EQ. 76+32) THEN ! L-key nettoland JADD = 13 call save() call nettoland() KEY = 3 NPUT = 38 ELSE IF (KEY .EQ. 75 ) THEN ! K-key derefine_mesh call save() call derefine_mesh(xp,yp,.true.) ELSE IF ( KEY .EQ. 75+32) THEN ! k-key killcell call save() call killcell(xp,yp) ELSE IF (KEY .EQ. 70 .OR. KEY .EQ. 70+32) THEN ! F-key FIXED POINT CALL ISNODE(KP, XP, YP, ZP) IF (KP .NE. 0) THEN CALL SAVE() IF (KC(KP) .EQ. -1) THEN KC(KP) = 1 NCOL = 0 ELSE KC(KP) = -1 NCOL = NCOLDN ENDIF CALL DCIRR(XK(KP),YK(KP),ZK(KP),NCOL) CALL TEKNODE(KP,NCOLDN) ENDIF ELSE IF (KEY .EQ. 76 .OR. KEY .EQ. 76+32) THEN ! L-key AANRIJGPUNT CALL ISNODE(KP, XP, YP, ZP) ! LINE IF (KP .NE. 0) THEN CALL SAVE() IF (KC(KP) .EQ. 2) THEN KC(KP) = 4 NCOL = 0 ELSE KC(KP) = 2 NCOL = NCOLRN ENDIF CALL DCIRR(XK(KP),YK(KP),ZK(KP),NCOL) CALL TEKNODE(KP,NCOLRN) ENDIF ELSE IF (KEY .EQ. 79 .OR. KEY .EQ. 79+32) THEN ! O-key ONELINE CALL ISNODE(KP, XP, YP, ZP) JADD = 4 IF (KP .NE. 0) THEN CALL TEKNODE(KP,0) CALL ONELINE(KP,99999d0) ENDIF ELSE IF (KEY .EQ. 84 .OR. KEY .EQ. 84+32) THEN ! T-key ! thin dam mode JADD = 7 K1 = 0 K2 = 0 NPUT = 55 ELSE IF (KEY .EQ. 83+32) THEN ! S-key ! split link JADD = 8 K1 = 0 K2 = 0 NPUT = 55 ELSE IF (KEY .EQ. 83) THEN ! SHIFT-S-key ! insert meshline JADD = 88 K1 = 0 K2 = 0 NPUT = 55 ELSE IF (KEY .EQ. 69 .OR. KEY .EQ. 69+32) THEN ! E-key ! add layer of cells JADD = 15 K1 = 0 K2 = 0 NPUT = 59 ELSE IF (KEY .EQ. 43 .OR. KEY .EQ. 43+32) THEN ! +-key ! CHANGE ZK VALUE mode JADD = 12 ELSE IF (KEY .EQ. 86 .OR. KEY .EQ. 86+32) THEN ! V-key CALL VIEWCYCLE(KEY) ELSE IF (KEY .EQ. 32) THEN call flow_spatietimestep() key = 3 ! ELSE IF (KEY .EQ. 75 .or. KEY .eq. 75+32) THEN ! K-KEY ELSE IF (KEY .EQ. 96 ) THEN ! `-KEY call checknetwork() !key = 3 ELSE IF (KEY .EQ. 81 .OR. KEY .EQ. 81+32) THEN ! Q-key ! call bilin_interp(numk, xk, yk, zk) ! testing subroutine ! call net_delete_DMISS() ! call sam2net_curvi() key = 3 ! redraw call removecell(xp,yp) ENDIF ! GOTO 10 ! END SUBROUTINE EDITNETW SUBROUTINE EDITflow(MODE,KEY) use m_netw use m_flowgeom, only : iadv use m_flow use unstruc_colors USE M_MISSING use unstruc_api use m_snappol use dfm_error use unstruc_messages implicit none integer :: MODE, KEY, kb , kt ,k integer :: newmode integer :: ncol, nput integer :: nlevel integer :: KK=0, LL integer :: num integer :: numb integer :: nwhat double precision :: xp, yp, zp, ZNOD double precision :: vmax, vmin, dv, val integer :: ncols, nv, nis, nie, jaauto integer :: i, Nin, Nout, ierror double precision, dimension(:), allocatable :: xin, yin, xout, yout ! testing, for snappol integer, dimension(:), allocatable :: ipoLout ! testing, for snappol COMMON /DEPMAX/ VMAX,VMIN,DV,VAL(256),NCOLS(256),NV,NIS,NIE,JAAUTO COMMON /HELPNOW/ WRDKEY,NLEVEL CHARACTER TEX*26, WRDKEY*40 integer :: iresult TEX = ' Edit FLOW ' WRDKEY = TEX NLEVEL = 2 NUM = 0 NWHAT = 0 NPUT = 51 NUMB = 16 NCOL = NCOLDN CALL SAVE() CALL BOTLIN(0,NUMB,KEY) 10 CONTINUE CALL DRAWNU(KEY) CALL KTEXT(TEX,1,2,15) CALL putget_un(NUM,NWHAT,NPUT,NUMB,XP,YP,KEY) CALL SETCOL(NCOLDN) IF (NUM .NE. 0) THEN ! ER IS EEN KEUZE IF (NUM .EQ. 4) THEN MODE = NWHAT RETURN ELSE CALL CHOICES(MODE,NUM,NWHAT,KEY) ENDIF ELSE IF (KEY >= 577) THEN ! Alt+letter switches edit mode. call selecteditmode(newmode, key) if (newmode > 0 .and. newmode /= mode) then mode = newmode return end if ELSE IF (KEY .EQ. 21) THEN ! INS KEY OF LINKERMUIS, kijken welk punt ! key = 3 IF (NPUT .EQ. 51 .or. NPUT == 53 .or. NPUT == 54) THEN ! NODE mode call in_flowcell(xp, yp, KK) if (kk > 0) then nplot = kk call tekprofs() call textflow() endif CALL DISND(KK) ELSE IF (NPUT .EQ. 52 .or. NPUT .EQ. 57 ) THEN ! LINK mode call isln(xp, yp, LL) if (nput == 57 .and. LL > 0 ) then zp = iadv(LL) CALL TYPEVALUE(zp,KEY) iadv(LL) = int(zp) endif if ( nput.eq.52 .and. LL.gt.0 ) call plotklnup(LL) ENDIF IF ( NPUT .EQ. 53 ) THEN ! Click flow node to set min value for isocol KEY = 3 if (KK == 0) then ! Miss click: reset iscol scaling to auto. jaauto = 1 else vmin = znod(KK) jaauto = 0 if (vmin > vmax) then key = 0 end if end if call minmxnds() ELSE IF ( NPUT .EQ. 54 ) THEN ! Click flow node to set max value for isocol KEY = 3 if (KK == 0) then ! Miss click: reset iscol scaling to auto. jaauto = 1 else vmax = znod(KK) jaauto = 0 if (vmin > vmax) then key = 0 end if end if call minmxnds() ENDIF ELSE IF (KEY .EQ. 22) THEN ! ENTER KEY ENKEL DISPLAY iresult = FLOW() if (iresult == DFM_SIGINT) then call mess(LEVEL_ERROR, 'Final handling of SIGINT signal. Stopping program.') call STOPINT() else if (iresult /= DFM_NOERR) then call qnerror('Error occurred while running, please inspect your diagnostic output.',' ', ' ') end if key = 3 ELSE IF (KEY .EQ. 23) THEN ! ESCAPE KEY KEY = 3 ELSE IF (KEY .EQ. 27) THEN ! TAB ELSE IF (KEY .EQ. 78 .OR. KEY .EQ. 78+32) THEN ! N-key voor node mode NPUT = 51 ELSE IF (KEY .EQ. 76 .OR. KEY .EQ. 76+32) THEN ! L-key voor link mode NPUT = 52 ELSE IF (KEY .EQ. 73 .OR. KEY .EQ. 73+32) THEN ! I-key voor setiadvec mode NPUT = 57 ELSE IF ( KEY .EQ. 77+32) THEN ! m (case sensitive!) ! click flow node to set minimum for isocol NPUT = 53 ELSE IF (KEY .EQ. 77 ) THEN ! M (case sensitive!) ! click flow node to set maximum for isocol NPUT = 54 ELSE IF (KEY .EQ. 86 .OR. KEY .EQ. 86+32) THEN ! V-key CALL VIEWCYCLE(KEY) ELSE IF (KEY .EQ. 83 .OR. KEY .EQ. 83+32) THEN ! S-key add salt if (jasal > 0) then call getkbotktop(nplot,kb , kt ) k = kb + kplot - 1 sa1(k) = sa1(k) + 1d0 endif ELSE IF (KEY .EQ. 43 .or. KEY .EQ. 140) THEN ! - CALL KPLOTPLUSMIN(-1) key = 3 ELSE IF (KEY .EQ. 45 .or. KEY .EQ. 141) THEN ! + call KPLOTPLUSMIN(1) key = 3 ELSE IF (KEY .EQ. 42) THEN ! * CALL nPLOTPLUSMIN(1) key = 3 ELSE IF (KEY .EQ. 47) THEN ! / call nPLOTPLUSMIN(-1) key = 3 ELSE IF (KEY .EQ. 32) THEN call flow_spatietimestep() key = 3 ELSE IF (KEY .EQ. 119 .or. KEY .EQ. 119-32) then ! w key write diff with obs call write_flowdiff() ELSE IF (KEY .EQ. 81 .OR. KEY .EQ. 81+32) THEN ! Q-key: snap polygon to flow network Nin = NPL allocate(xin(Nin), yin(Nin)) do i=1,Nin xin(i) = XPL(i) yin(i) = YPL(i) end do !call snappol(Nin, xin, yin, DMISS, Nout, Xout, Yout, ipoLout, ierror) !call snappnt(Nin, xin, yin, DMISS, Nout, Xout, Yout, ipoLout, ierror) if ( KEY.eq.81 ) then call snapbnd('dischargebnd', Nin, xin, yin, DMISS, Nout, Xout, Yout, ipoLout, ierror) else call snapbnd('waterlevelbnd', Nin, xin, yin, DMISS, Nout, Xout, Yout, ipoLout, ierror) end if NPL = Nout call increasepol(NPL,0) do i=1,Nout XPL(i) = xout(i) YPL(i) = yout(i) ZPL(i) = dble(ipoLout(i)) end do if ( allocated(xin) ) deallocate(xin, yin) if ( allocated(xout) ) deallocate(xout, yout) if ( allocated(ipoLout) ) deallocate(ipoLout) else if ( key.ge.49 .and. key.le.57 ) then ! keypad, for moving around call moveprobe(key-48,kk,xp,yp) if (kk > 0) then nplot = kk call tekprofs() call textflow() endif CALL DISND(KK) ENDIF ! GOTO 10 ! END SUBROUTINE EDITflow SUBROUTINE FIELDOPT(NFLD) USE M_GRID implicit none integer :: nfld integer, PARAMETER :: MAXOP = 50 integer :: nwhat2, maxexp, maxopt, i CHARACTER*40 OPTION(MAXOP),EXP(MAXOP),FIELDOP EXP(1) = 'MENU 10 ' EXP(2) = 'GRID EDIT OPTIONS ' MAXOPT = 20 DO 10 I = 1,MAXOPT OPTION(I) = FIELDOP(I) 10 CONTINUE NWHAT2 = NFLD CALL MENUV2(NWHAT2,OPTION,MAXOPT,EXP,MAXEXP) IF (NWHAT2 .GE. 1) THEN IF (NWHAT2 == 19) THEN CALL ORTHOGRID(1,1,MC,NC) ELSE NFLD = NWHAT2 ENDIF ENDIF RETURN END subroutine fieldopt FUNCTION FIELDOP(NUM) implicit none integer :: num CHARACTER*40 FIELDOP IF (NUM .EQ. 1) THEN FIELDOP = 'Point Mode ' ELSE IF (NUM .EQ. 2) THEN FIELDOP = 'Field Mode ' ELSE IF (NUM .EQ. 3) THEN FIELDOP = ' ' ELSE IF (NUM .EQ. 4) THEN FIELDOP = 'Line Shift ' ELSE IF (NUM .EQ. 5) THEN FIELDOP = 'Line Attraction ' ELSE IF (NUM .EQ. 6) THEN FIELDOP = 'Line Repulsion ' ELSE IF (NUM .EQ. 7) THEN FIELDOP = 'Line to Land Boundary ' ELSE IF (NUM .EQ. 8) THEN FIELDOP = 'Line to Spline (only to spline nr 1) ' ELSE IF (NUM .EQ. 9) THEN FIELDOP = 'Line Smooth ' ELSE IF (NUM .EQ. 10) THEN FIELDOP = 'Line Mirror ' ELSE IF (NUM .EQ. 11) THEN FIELDOP = 'Refine Grid Locally ' ELSE IF (NUM .EQ. 12) THEN FIELDOP = 'Derefine Grid Locally ' ELSE IF (NUM .EQ. 13) THEN FIELDOP = ' ' ELSE IF (NUM .EQ. 14) THEN FIELDOP = 'Block Delete ' ELSE IF (NUM .EQ. 15) THEN FIELDOP = 'Block Cut ' ELSE IF (NUM .EQ. 16) THEN FIELDOP = 'Block Orthogonalise ' ELSE IF (NUM .EQ. 17) THEN FIELDOP = 'Block Smooth ' ELSE IF (NUM .EQ. 18) THEN FIELDOP = ' ' ELSE IF (NUM .EQ. 19) THEN FIELDOP = 'Orthogonise whole grid ' ELSE IF (NUM .EQ. 20) THEN FIELDOP = 'Back to Main Edit Modes ' ENDIF RETURN END function fieldop SUBROUTINE EDITGRID(MODE,NFLD,KEY) use unstruc_colors use m_grid implicit none integer :: mode, nfld, key integer :: L, NLEVEL, JA, NUM, NWHAT, NPUT, NUMB, MP, NP, MD, ND, & ML, NL, MH, NH, NUMP, NLOC, IN, JN, INSIDE, ndraw, NCOL integer :: newmode COMMON /HELPNOW/ WRDKEY,NLEVEL COMMON /DRAWTHIS/ NDRAW(40) CHARACTER TEX*20, WRDKEY*40, FIELDOP*40 double precision :: xp, yp, wf(4) TEX = ' '//FIELDOP(NFLD) L = len_trim(TEX) WRDKEY = FIELDOP(NFLD) NLEVEL = 3 JA = 0 NUM = 0 NWHAT = 0 NPUT = 0 NUMB = 17 NCOL = NCOLDG MP = 0 NP = 0 CALL BOTLIN(0,NUMB,KEY) 10 CONTINUE CALL DRAWNU(KEY) CALL KTEXT(TEX,1,2,15) CALL KTEXT(' Click Grid Points ',1,3,15) CALL putget_un(NUM,NWHAT,NPUT,NUMB,XP,YP,KEY) IF (NUM .NE. 0) THEN ! ER IS EEN KEUZE IF (NUM .EQ. 4) THEN MODE = NWHAT RETURN ELSE CALL CHOICES(MODE,NUM,NWHAT,KEY) ENDIF ELSE IF (KEY >= 577) THEN ! Alt+letter switches edit mode. call selecteditmode(newmode, key) if (newmode > 0 .and. newmode /= mode) then mode = newmode return end if ELSE IF (KEY .EQ. 21) THEN ! INS KEY IF (NPUT .EQ. 0 .OR. NPUT .EQ. -2) THEN ! kijken welk punt bij deleten en bij oppakken CALL ISPOIN( xc, yc, mmax, nmax, MC, NC, zc, & XP, YP, MP, NP) ENDIF IF ( NPUT .EQ. 0 .AND. MP .NE. 0) THEN ! punt oppakken CALL TEKGRPT( xc, yc, mmax, nmax, MC, NC, & MP, NP, 0 ) NPUT = 1 ELSE IF (NPUT .EQ. 1 .AND. MP .NE. 0) THEN ! punt neerzetten IF (NFLD .EQ. 1) THEN CALL SAVEGRD() xc(MP,NP) = XP yc(MP,NP) = YP CALL TEKGRPT( xc, yc, mmax, nmax, MC, NC, & MP, NP, NCOL ) ELSE IF (NFLD .EQ. 2) THEN NUMP = 80 NLOC = 1 ML = MAX(1,MP-NUMP) MH = MIN(MC,MP+NUMP) NL = MAX(1,NP-NUMP) NH = MIN(NC,NP+NUMP) CALL TEKGRD(xc,yc,mmax, nmax, ML,NL,MH,NH,0,NDRAW(38),key,mc) CALL TEKGRD(xch,ych,mmax, nmax, ML,NL,MH,NH,0,NDRAW(16),key,mch) CALL SAVEGRD() xc(MP,NP) = XP yc(MP,NP) = YP CALL MODFLD( xc, yc, xch, ych, mmax, nmax, & MC, NC, MP, NP, & NUMP, NLOC, 1, 1) CALL TEKGRD(xc,yc,mmax, nmax, ML,NL,MH,NH,NCOL,NDRAW(38),key,mc) CALL TEKGRD(xch, ych, mmax, nmax, ML, NL, MH, NH, NCOLRG, NDRAW(16),key,mch) ENDIF NPUT = 0 ELSE IF (NPUT .EQ. -1) THEN ! punt toevoegen CALL FINDNM( XP, YP, xc, yc, mmax, nmax, & MC, NC, INSIDE, & MP, NP, IN, JN, wf) IF (INSIDE .EQ. 1) THEN CALL SAVEGRD() CALL MODGR1(NPUT, &! xc, yc, mmax, nmax, MC, NC, MP, NP, IN, JN)!, NCOL) ELSE CALL OKAY(0) ENDIF ELSE IF ( NPUT .EQ. -2 .AND. MP .NE. 0) THEN ! punt deleten CALL SAVEGRD() CALL TEKGRPT( xc, yc, mmax, nmax, MC, NC, & MP, NP, 0 ) CALL MODGR1(NPUT, &!xc, yc, mmax, nmax, MC, NC, MP, NP, IN, JN)!, NCOL) ENDIF ELSE IF (KEY .EQ. 22) THEN ! ENTER KEY ENKEL DISPLAY CALL ISPOIN( xc, yc, mmax, nmax, MC, NC, zc, & XP, YP, MD, ND) ELSE IF (KEY .EQ. 23) THEN ! ESCAPE KEY CALL RESTOREGRD() KEY = 3 ELSE IF (KEY .EQ. 27) THEN ! TAB !CALL SHWXYZ(xc, yc, zc,MC,NC,0,KEY,M,N) ELSE IF (KEY .EQ. 73 .OR. KEY .EQ. 73+32) THEN IF (NPUT .NE. 1) THEN ! kijken welk punt dit is t.b.v insert mode CALL ISPOIN( xc, yc, mmax, nmax, MC, NC, zc, & XP, YP, MP, NP) ENDIF NPUT = -1 ELSE IF (KEY .EQ. 8) THEN ! Backspace KEY ! delete entire network (within polygon if any) and stay in previous mode. call delgrd(KEY,1,1) key = 3 ELSE IF (KEY .EQ. 68 .OR. KEY .EQ. 68+32) THEN ! delete mode NPUT = -2 ELSE IF (KEY .EQ. 82 .OR. KEY .EQ. 82+32 .AND. NPUT .NE. 1) THEN ! replace mode, maar niet bij zetten NPUT = 0 ELSE IF (KEY .EQ. 85 .OR. KEY .EQ. 85+32 ) THEN ! U-KEY, UPDATE PARTITIONING COUNT CALL TEKnumnetcells(1) KEY = 3 ELSE IF (KEY .EQ. 98) THEN ! b RINGS BELL CALL KTEXT(' B Rings Bell',2,6,11) CALL OKAY(0) ELSE IF (KEY .EQ. 76 .OR. KEY .EQ. 76+32) THEN ! CALL TEKHOOK(XP,YP) ENDIF ! GOTO 10 ! END subroutine editgrid SUBROUTINE EDITGRIDLINEBLOK(MODE,NFLD,KEY) use unstruc_colors use m_grid implicit none integer :: mode, nfld, key integer :: newmode integer :: ndraw, nlevel, bm, nb, mb2, nb2, npt, npt2, nputo, itype, NCOL integer :: jonce COMMON /DRAWTHIS/ NDRAW(40) COMMON /HELPNOW/ WRDKEY,NLEVEL COMMON /BLOK/ MB(6),NB(6),MB2(6),NB2(6),NPT,NPT2,NPUTO,ITYPE CHARACTER TEX*20, WRDKEY*40, FIELDOP*40 integer :: num, nwhat, numb, nump, mp, np, ipt, ja, mb, m1b, n1b, m2b, n2b, m1, n1, m2, n2, m, n integer :: nput double precision :: xp, yp TEX = ' '//FIELDOP(NFLD) WRDKEY = FIELDOP(NFLD) NLEVEL = 3 NUM = 0 NWHAT = 0 NUMB = 6 NCOL = NCOLRG NUMP = 80 MP = 0 NP = 0 ITYPE = 1 NPUT = 10 CALL RESETB(NPUT) CALL BOTLIN(0,NUMB,KEY) 10 CONTINUE CALL DRAWNU(KEY) CALL TEKB(Xc,Yc,MMAX,NMAX,NCOLLN) CALL KTEXT(TEX,1,2,15) IF (NPT .LE. 1) THEN CALL KTEXT(' Indicate a Line ',1,3,15) ELSE CALL KTEXT(' Influence or rght M',1,3,15) ENDIF CALL putget_un(NUM,NWHAT,NPUT,NUMB,XP,YP,KEY) IF (KEY .NE. 23) JONCE = 0 IF (NUM .NE. 0) THEN ! ER IS EEN KEUZE IF (NUM .EQ. 4) THEN MODE = NWHAT CALL TEKB(Xc,Yc,MMAX,NMAX,0) RETURN ELSE CALL CHOICES(MODE,NUM,NWHAT,KEY) ENDIF ELSE IF (KEY >= 577) THEN ! Alt+letter switches edit mode. call selecteditmode(newmode, key) if (newmode > 0 .and. newmode /= mode) then mode = newmode return end if ELSE IF (KEY .EQ. 21) THEN ! INS KEY ! kijken welk punt CALL ISPOIN( Xc, Yc, mmax, nmax, MC, NC, Zc, & XP, YP, MP, NP) IF (MP .NE. 0) THEN IF (NPUT .EQ. 16) THEN CALL ONSAMELINE(IPT,MP,NP,JA) IF (JA .EQ. 1) THEN MB(IPT) = MP NB(IPT) = NP CALL CIRR(Xc(MP,NP), Yc(MP,NP), NCOLLN) IF (NPT .EQ. 1) NPUT = 11 IF (NPT .EQ. 2) NPUT = 14 IF (NPT .EQ. 3) NPUT = 15 IF (NPT .EQ. 4) NPUT = 19 ELSE CALL QNERROR('POINT 1 AND 2 SHOULD LIE', & 'ON THE SAME GRIDLINE',' ') ENDIF ELSE CALL NEWBLOCKPOINT(MP,NP,JA,IPT) IF (JA .EQ. 1) THEN ! voeg punt toe CALL ONSAMELINE(IPT,MP,NP,JA) IF (JA .EQ. 1) THEN CALL SAVEB(NPUT) NPT = NPT + 1 MB(NPT) = MP NB(NPT) = NP CALL CIRR(Xc(MB(NPT),NB(NPT)), Yc(MB(NPT),NB(NPT)),NCOLLN) IF (NPT .EQ. 1) NPUT = 11 IF (NPT .EQ. 2) NPUT = 14 IF (NPT .EQ. 3) NPUT = 15 IF (NPT .EQ. 4) NPUT = 19 ELSE CALL QNERROR('POINT 1 AND 2 SHOULD LIE','ON THE SAME GRIDLINE',' ') ENDIF ELSE IF (JA .EQ. -1) THEN ! niet meer toevoegen CALL QNERROR('4 POINTS: CONTINUE = RIGHT MOUSE OR', 'Enter,',' ') ELSE IF (JA .EQ. 0) THEN ! oud punt geclickt; uitgummen CALL SAVEB(NPUT) CALL CIRR(Xc(MB(IPT),NB(IPT)),Yc(MB(IPT),NB(IPT)),0) IF (IPT .LE. 2) CALL TEKB(Xc,Yc,MMAX,NMAX,0) MB(IPT) = 0 NB(IPT) = 0 NPUT = 16 ENDIF ENDIF ENDIF ELSE IF (KEY .EQ. 22) THEN IF (NPT .LE. 1) THEN CALL QNERROR('FIRST PRESS MORE POINTS WITH LEFT MOUSE BUTTON',' ',' ') ELSE ! ENTER KEY CALL TEKB(Xc,Yc,MMAX,NMAX,0) CALL POSITIVEBLOK() M1B = MAX(MB(3)-1,1) N1B = MAX(NB(3)-1,1) M2B = MIN(MB(4)+1,MC) N2B = MIN(NB(4)+1,NC) IF (NFLD .NE. 4) THEN CALL TEKGRD(Xc,Yc,mmax, nmax, M1B,N1B,M2B,N2B,0,NDRAW(38),key,mc) ENDIF ! Begin Operatie CALL SAVEGRD() IF (NFLD .EQ. 4) THEN M1 = MB(1) M2 = MB(2) N1 = NB(1) N2 = NB(2) CALL EDITGRIDLINESHIFT(MODE,NFLD,KEY,M1,N1,M2,N2) IF (KEY .NE. 23) THEN CALL TEKGRD( Xc, Yc, mmax, nmax, M1B, & N1B, M2B, N2B,0,NDRAW(38),key,mc) CALL MODGR2( Xc, Yc, Xch, Ych, mmax, nmax, & MC, NC, NUMP) ENDIF ELSE IF (NFLD .EQ. 5) THEN ! Attraction CALL ATTRACTREPULSE( Xc, Yc, Xch, Ych, & mmax, nmax, & MC, NC, NUMP, -1) ELSE IF (NFLD .EQ. 6) THEN ! Repulsion CALL ATTRACTREPULSE( Xc, Yc, Xch, Ych, & mmax, nmax, & MC, NC, NUMP, 1) ELSE IF (NFLD .EQ. 7) THEN CALL MODGR4( NUMP,1 ) ELSE IF (NFLD .EQ. 8) THEN CALL MODGR4( NUMP,2 ) ELSE IF (NFLD .EQ. 9) THEN CALL DOSMOOTH(NFLD)!Xc,Yc,mmax, nmax, MC,NC,NFLD,IJC,IJYES) ELSE IF (NFLD .EQ. 10) THEN CALL LINEMIRROR()!Xc,Yc,mmax, nmax, MC,NC,IJC,IJYES) ELSE IF (NFLD .EQ. 11) THEN M1 = MB(1) M2 = MB(2) N1 = NB(1) N2 = NB(2) CALL LOCALREFINE(MODE, KEY, NUM, m1, m2, n1, n2, 1) ELSE IF (NFLD .EQ. 12) THEN M1 = MB(1) M2 = MB(2) N1 = NB(1) N2 = NB(2) CALL LOCALREFINE(MODE, KEY, NUM, m1, m2, n1, n2, 2) ENDIF ! Einde Operatie CALL TEKGRD( Xc, Yc, mmax, nmax, M1B, & N1B, M2B, N2B, NCOLDG, NDRAW(38),key,mc) CALL TEKGRD( Xch, Ych, mmax, nmax, M1B, & N1B, M2B, N2B, NCOLRG, NDRAW(16),key,mch) IF (NPT .LE. 2) KEY = 3 CALL RESETB(NPUT) NPUT = 10 ENDIF ELSE IF (KEY .EQ. 23) THEN ! ESC JONCE = JONCE + 1 IF (JONCE .EQ. 1) THEN CALL RESTOREB(NPUT) ELSE IF (JONCE .EQ. 2) THEN NPUT = 10 CALL RESETB(NPUT) ELSE IF (JONCE .EQ. 3) THEN CALL RESTOREgrd() ENDIF KEY = 3 ELSE IF (KEY .EQ. 27) THEN ! TAB CALL SHWXYZ(Xc,Yc,Zc,mmax, nmax, MC,NC,0,KEY,M,N) ENDIF ! GOTO 10 ! END subroutine editgridlineblok SUBROUTINE EDITGRIDLINESHIFT(MODE,NFLD,KEY,M1,N1,M2,N2) use m_grid use unstruc_colors implicit none integer :: MODE, NFLD, KEY, M1, N1, M2, N2 integer :: newmode COMMON /HELPNOW/ WRDKEY,NLEVEL CHARACTER TEX*20, WRDKEY*40, FIELDOP*40 INTEGER :: NLEVEL, JA, NUM, NWHAT, NPUT, NUMB, JONCE, mp, np, m, n, NCOL double precision :: xp, yp TEX = ' '//FIELDOP(NFLD) WRDKEY = FIELDOP(NFLD) NLEVEL = 3 JA = 0 NUM = 0 NWHAT = 0 NPUT = 20 NUMB = 7 NCOL = NCOLRG JONCE = 0 MP = 0 NP = 0 CALL BOTLIN(0,NUMB,KEY) 10 CONTINUE CALL DRAWNU(KEY) CALL KTEXT(TEX,1,2,15) CALL KTEXT(' Now Shift the Line ',1,3,15) CALL TEKLN2(Xc, Yc, mmax, nmax, M1, N1, M2, N2, NCOL) 20 CONTINUE CALL putget_un(NUM,NWHAT,NPUT,NUMB,XP,YP,KEY) IF (KEY .NE. 23) JONCE = 0 IF (NUM .NE. 0) THEN ! ER IS EEN KEUZE IF (NUM .EQ. 4) THEN MODE = NWHAT RETURN ELSE CALL QNERROR('Menu is disabled, leave SHIFT LINE ', & '(Esc or right mouse button)',' ') NUM = 0 ! CALL CHOICES(MODE,NUM,NWHAT,KEY) ENDIF ELSE IF (KEY >= 577) THEN ! Alt+letter switches edit mode. call selecteditmode(newmode, key) if (newmode > 0 .and. newmode /= mode) then mode = newmode return end if ELSE IF (KEY .EQ. 21) THEN ! INS KEY IF (NPUT .EQ. 20) THEN ! kijken welk punt bij oppakken CALL ISPOIN( Xc, Yc, mmax, nmax, MC, NC, Zc, & XP, YP, MP, NP) ! moet wel op lijn liggen IF (M1 .EQ. M2) THEN IF (MP .EQ. M1) THEN IF (NP .LT. N1 .OR. NP .GT. N2) THEN CALL QNERROR('Only shift points on the indicated','line',' ') MP = 0 ENDIF ELSE CALL QNERROR('Only shift points on the indicated','line',' ') MP = 0 ENDIF ENDIF IF (N1 .EQ. N2) THEN IF (NP .EQ. N1) THEN IF (MP .LT. M1 .OR. MP .GT. M2) THEN CALL QNERROR('Only shift points on the indicated','line',' ') MP = 0 ENDIF ELSE CALL QNERROR('Only shift points on the indicated','line',' ') MP = 0 ENDIF ENDIF ENDIF IF ( NPUT .EQ. 20 .AND. MP .NE. 0) THEN ! punt oppakken CALL TEKGRPT( Xc, Yc, mmax, nmax, MC, NC, & MP, NP, 0 ) NPUT = 1 ELSE IF (NPUT .EQ. 1 .AND. MP .NE. 0) THEN ! punt neerzetten Xc(MP,NP) = XP Yc(MP,NP) = YP CALL TEKGRPT( Xc, Yc, mmax, nmax, MC, NC, & MP, NP, NCOL ) NPUT = 20 ENDIF GOTO 20 ELSE IF (KEY .EQ. 22) THEN ! ENTER KEY RETURN ELSE IF (KEY .EQ. 23) THEN ! ESCAPE KEY JONCE = JONCE + 1 IF (JONCE .EQ. 1) THEN CALL RESTOREgrd() KEY = 3 ELSE RETURN ENDIF ELSE IF (KEY .EQ. 27) THEN ! TAB CALL SHWXYZ(Xc,Yc,Zc,mmax, nmax, MC,NC,0,KEY,M,N) ELSE IF (KEY .EQ. 98) THEN ! b RINGS BELL CALL KTEXT('B Rings Bell',2,6,11) CALL OKAY(0) ENDIF ! GOTO 10 ! 7 END subroutine editgridlineshift SUBROUTINE EDITGRIDBLOK(MODE,NFLD,KEY) use m_grid use unstruc_colors implicit none integer :: mode, nfld, key integer :: newmode integer :: ndraw, nlevel, num, nwhat, numb, mp, np COMMON /DRAWTHIS/ NDRAW(40) COMMON /HELPNOW/ WRDKEY,NLEVEL integer :: MB,NB,MB2,NB2,NPT,NPT2,NPUTO,ITYPE COMMON /BLOK/ MB(6),NB(6),MB2(6),NB2(6),NPT,NPT2,NPUTO,ITYPE CHARACTER TEX*20, WRDKEY*40, FIELDOP*40 integer :: m1b, n1b, m2b, n2b, ipt, ja, jonce, m, n, nput double precision :: xp, yp TEX = ' '//FIELDOP(NFLD) WRDKEY = FIELDOP(NFLD) NLEVEL = 3 NUM = 0 NWHAT = 0 NUMB = 8 MP = 0 NP = 0 ITYPE = 2 jonce = 0 NPUT = 8 CALL RESETB(NPUT) CALL BOTLIN(0,NUMB,KEY) 10 CONTINUE CALL DRAWNU(KEY) CALL TEKB(Xc,Yc,MMAX,NMAX,NCOLLN) CALL KTEXT(TEX,1,2,15) CALL KTEXT(' Indicate a Block ',1,3,15) CALL putget_un(NUM,NWHAT,NPUT,NUMB,XP,YP,KEY) IF (KEY .NE. 23) JONCE = 0 IF (NUM .NE. 0) THEN ! ER IS EEN KEUZE IF (NUM .EQ. 4) THEN MODE = NWHAT CALL TEKB(Xc,Yc,MMAX,NMAX,0) RETURN ELSE CALL CHOICES(MODE,NUM,NWHAT,KEY) ENDIF ELSE IF (KEY >= 577) THEN ! Alt+letter switches edit mode. call selecteditmode(newmode, key) if (newmode > 0 .and. newmode /= mode) then mode = newmode return end if ELSE IF (KEY .EQ. 21) THEN ! INS KEY ! kijken welk punt CALL ISPOIN( Xc, Yc, mmax, nmax, MC, NC, Zc, & XP, YP, MP, NP) IF (MP .NE. 0) THEN IF (NPUT .EQ. 16) THEN MB(IPT) = MP NB(IPT) = NP CALL CIRR(Xc(MP,NP), Yc(MP,NP), NCOLLN) IF (NPT .EQ. 1) NPUT = 9 IF (NPT .EQ. 2) NPUT = 17 IF (NPT .EQ. 3) NPUT = 18 IF (NPT .EQ. 4) NPUT = 19 ELSE CALL NEWBLOCKPOINT(MP,NP,JA,IPT) IF (JA .EQ. 1) THEN ! voeg punt toe CALL SAVEB(NPUT) NPT = NPT + 1 MB(NPT) = MP NB(NPT) = NP CALL CIRR(Xc(MB(NPT),NB(NPT)),Yc(MB(NPT),NB(NPT)),NCOLLN) IF (NPT .EQ. 1) NPUT = 9 IF (NPT .EQ. 2) NPUT = 17 IF (NPT .EQ. 3) NPUT = 18 IF (NPT .EQ. 4) NPUT = 19 ELSE IF (JA .EQ. -1) THEN ! niet meer toevoegen CALL QNERROR('4 POINTS: CONTINUE = RIGHT MOUSE OR', 'Enter,',' ') ELSE IF (JA .EQ. 0) THEN ! oud punt geclickt; uitgummen CALL SAVEB(NPUT) CALL CIRR(Xc(MB(IPT),NB(IPT)),Yc(MB(IPT),NB(IPT)),0) IF (IPT .LE. 2) CALL TEKB(Xc,Yc,MMAX,NMAX,0) MB(IPT) = 0 NB(IPT) = 0 NPUT = 16 ENDIF ENDIF ENDIF ELSE IF (KEY .EQ. 22) THEN ! ENTER KEY IF (NPT .LE. 1) THEN CALL QNERROR('FIRST PRESS MORE POINTS WITH LEFT MOUSE BUTTON',' ',' ') ELSE CALL TEKB(Xc,Yc,MMAX,NMAX,0) CALL POSITIVEBLOK() M1B = MAX(MB(3)-1,1) N1B = MAX(NB(3)-1,1) M2B = MIN(MB(4)+2,MC) N2B = MIN(NB(4)+2,NC) CALL TEKGRD( Xc, Yc, mmax, nmax, M1B, & N1B, M2B, N2B,0,NDRAW(38), key, mc) if (allocated(xch)) then CALL TEKGRD( Xch, Ych, mmax, nmax, M1B, & N1B, M2B, N2B,0,NDRAW(16), key, mc) end if ! Begin Operatie CALL SAVEgrd() IF (NFLD .EQ. 14) THEN CALL NULFIELD(Xc,Yc, mmax, nmax) ELSE IF (NFLD .EQ. 15) THEN CALL CUTFIELD(Xc,Yc,mmax, nmax, MC,NC) ELSE IF (NFLD .EQ. 16) THEN !CALL ORTHO(X, Y, MB(3), NB(3), MB(4), NB(4), MC, NC, NUM, MMAX,NMAX)!!! CALL ORTHOGRID(MB(3), NB(3), MB(4), NB(4)) ELSE IF (NFLD .EQ. 17) THEN CALL DOSMOOTH(NFLD) !Xc,Yc,mmax, nmax, MC,NC,NFLD,IJC,IJYES) ENDIF ! Einde Operatie CALL TEKGRD( Xc, Yc, mmax, nmax, M1B, & N1B, M2B, N2B, NCOLDG, NDRAW(38), key, mc) if (allocated(xch)) then CALL TEKGRD( Xch, Ych, mmax, nmax, M1B, & N1B, M2B, N2B, NCOLRG, NDRAW(16), key, mc) end if IF (NFLD .EQ. 14) THEN IF (MB(3) .EQ. 1 .OR. MB(4) .EQ. MC .OR. & NB(3) .EQ. 1 .OR. NB(4) .EQ. NC ) THEN CALL ADJUST(Xc, Yc, mmax, nmax, MC, NC) ENDIF ELSE IF (NFLD .EQ. 15) THEN CALL ADJUST(Xc, Yc, mmax, nmax, MC, NC) KEY = 3 ENDIF CALL RESETB(NPUT) NPUT = 8 ENDIF ELSE IF (KEY .EQ. 23) THEN ! ESC JONCE = JONCE + 1 IF (JONCE .EQ. 1) THEN CALL RESTOREB(NPUT) ELSE IF (JONCE .EQ. 2) THEN NPUT = 10 CALL RESETB(NPUT) ELSE IF (JONCE .EQ. 3) THEN CALL RESTOREgrd() ENDIF KEY = 3 ELSE IF (KEY .EQ. 27) THEN ! TAB CALL SHWXYZ(Xc,Yc,Zc,mmax, nmax, MC,NC,0,KEY,M,N) ENDIF ! GOTO 10 ! END subroutine editgridblok SUBROUTINE TEKNET(NCOL,ja) use m_netw use unstruc_colors implicit none integer :: ncol, ja logical :: inview integer :: k, LMOD integer :: k0 integer :: k1 integer :: k2 integer :: k3 integer :: kk integer :: L, LL integer :: n integer :: ndraw double precision, external :: dbdistance double precision :: d1, d2, x, y ! double precision :: t0, t1 integer :: is, ie, ip integer :: iflip = 1 COMMON /DRAWTHIS/ NDRAW(40) IF (NDRAW(2) .LE. 0 .or. NUML == 0 ) RETURN ! call klok(t0) if (ndraw(2) .ne. 3) then ! net zelf iflip = -iflip if (.false. .and. allocated(netlinkpath_xk) .and. iflip==1) then write (*,*) 'Fast plotter' is = 1 CALL SETCOL(NCOL) do L=1,numpath ie = netlinkpath_end(L) call POLYLINE(netlinkpath_xk(is:ie), & netlinkpath_yk(is:ie), & ie-is+1) is = ie+1 end do else DO L = 1,NUML if (ja.ne.-1234 .and. mod(L,500) == 0) then call halt2(ja) if (ja == 1) exit endif K1 = KN(1,L) K2 = KN(2,L) IF (K1 .NE. 0 .AND. K2 .NE. 0) THEN IF (INVIEW(XK(K1),YK(K1)) .OR. INVIEW(XK(K2),YK(K2)) ) THEN CALL SETLINKCOLOUR(L,1) CALL MOVABS( XK(K1),YK(K1)) CALL LNABS( XK(K2),YK(K2)) ENDIF ENDIF ENDDO end if endif if (ndraw(2) .ne. 3) then ! gele puntjes CALL SETCOL(NCOLNN) if ( ja.ne.-1234 ) ja = 0 DO K = 1,NUMK if (ja.ne.-1234 .and. mod(k,500) == 0) then call halt2(ja) if (ja == 1) exit endif if ( INVIEW( XK(K),YK(K) ) ) then CALL PTABS(XK(K),YK(K)) ENDIF ENDDO if (ndraw(2) == 4) then call setcol(ncoldg) Do L = 1, numl if (kn(3,L) == 1) then k1 = kn(1,L) x = xk(k1) y = yk(k1) call fbox(x-0.5d0*rcir,y-0.5d0*rcir,x+0.5d0*rcir,y+0.5d0*rcir) k1 = kn(2,L) x = xk(k1) y = yk(k1) call fbox(x-0.5d0*rcir,y-0.5d0*rcir,x+0.5d0*rcir,y+0.5d0*rcir) endif enddo endif endif IF ( (NDRAW(2) == 2 .or. NDRAW(2) == 3 ).AND. SIZE(LNN) .GE. NUML) THEN !outline CALL SETCOL(NCOLRN) LMOD = MAX(1,NUML/100) DO L = 1,NUML if (ja.ne.-1234 .and. mod(L,LMOD) == 0) then call halt2(ja) if (ja == 1) exit endif IF (LNN(L) == 1) THEN K1 = KN(1,L) K2 = KN(2,L) IF (K1 .NE. 0 .AND. K2 .NE. 0) THEN CALL MOVABS( XK(K1),YK(K1) ) CALL LNABS( XK(K2),YK(K2) ) ENDIF ENDIF ENDDO ENDIF IF ( NDRAW(2) == 4) THEN CALL TEKXZ(221) ENDIF IF (NDRAW(22) .GE. 2) CALL TEKFACES() if (NDRAW(2)==5) then ! Draw link crossings (precomputed by checknet) DO L = 1,nlinkcross call TEKLINK (linkcross(1,L),NCOLWARN1) call TEKLINK (linkcross(2,L),NCOLWARN2) LL = linkcross(1,L) if (kn(1,linkcross(1,L)) <= 0 .or. kn(1,linkcross(1,L)) > numk .or. & kn(2,linkcross(1,L)) <= 0 .or. kn(2,linkcross(1,L)) > numk .or. & kn(1,linkcross(2,L)) <= 0 .or. kn(1,linkcross(2,L)) > numk .or. & kn(2,linkcross(2,L)) <= 0 .or. kn(2,linkcross(2,L)) > numk) cycle d1 = max(abs(xk(kn(2,linkcross(1,L)))-xk(kn(1,linkcross(1,L)))), & abs(yk(kn(2,linkcross(1,L)))-yk(kn(1,linkcross(1,L))))) d2 = max(abs(xk(kn(2,linkcross(2,L)))-xk(kn(1,linkcross(2,L)))), & abs(yk(kn(2,linkcross(2,L)))-yk(kn(1,linkcross(2,L))))) ! If zoom is very small: plot large dots to mark crossings clearly. if (max(d1, d2) < 2*RCIR) then CALL CIRR(xk(kn(1,linkcross(1,L))), yk(kn(1,linkcross(1,L))), NCOLWARN1) end if end do ! Also draw bad orthogonality links (precomputed by cosphiucheck) ! and too short flow links (precomputed by flow_geominit) . DO L = 1,nlinkbadortho+nlinktoosmall LL = linkbadqual(L) if (LL <= 0 .or. LL > numl) cycle if (kn(1,LL) <= 0 .or. kn(1,LL) > numk .or. & kn(2,LL) <= 0 .or. kn(2,LL) > numk) cycle call TEKLINK (LL,NCOLWARN3) d1 = max(abs(xk(kn(2,LL))-xk(kn(1,LL))), & abs(yk(kn(2,LL))-yk(kn(1,LL)))) ! If zoom is very small: plot large dots to mark crossings clearly. if (d1 < 2*RCIR) then CALL CIRR(xk(kn(1,LL)), yk(kn(1,LL)), NCOLWARN3) end if end do end if ! call klok(t1) ! write(6,"('time elapsed in teknet: ', F15.5, 'seconds')") t1-t0 RETURN END SUBROUTINE TEKNET SUBROUTINE TEKXZ(NCOL) use m_netw USE M_FLOWGEOM implicit none INTEGER :: NCOL integer :: n double precision :: bar DO N = 1,NUMP CALL DCIRR ( xz(n), yz(n), YZw(N), NCOL ) ENDDO RETURN END SUBROUTINE TEKXZ SUBROUTINE TEKFACES() use unstruc_colors use m_netw implicit none integer :: ierr integer :: k integer :: l integer :: n integer :: ncol integer :: ni DOUBLE PRECISION XX,YY,ZZ, XH(10), YH(10), ZH(10) INTEGER, ALLOCATABLE, SAVE :: NP(:) double precision :: XP, YP double precision, ALLOCATABLE, SAVE :: ZP(:) IF (SIZE(NP) .LT. NUMP) THEN IF ( ALLOCATED(NP) ) DEALLOCATE(NP,ZP) ALLOCATE (NP(NUMP),ZP(NUMP),STAT = IERR) ENDIF IF (NUMP .NE. 0) THEN DO N = 1, NUMP XX = 0 YY = 0 ZZ = 0 DO K = 1,netcell(N)%N XX = XX + XK(netcell(N)%NOD(K)) YY = YY + YK(netcell(N)%NOD(K)) ZZ = ZZ + ZK(netcell(N)%NOD(K)) ENDDO XX = XX/netcell(N)%N YY = YY/netcell(N)%N ZZ = ZZ/netcell(N)%N CALL DRIETWEE(XX,YY,ZZ,XP,YP,ZP(N)) ENDDO CALL INDEXX(NUMP,ZP,NP) DO L = NUMP, 1, -1 N = NP(L) NI = netcell(N)%N DO K = 1, NI XH(K) = XK(netcell(N)%NOD(K)) YH(K) = YK(netcell(N)%NOD(K)) ZH(K) = ZK(netcell(N)%NOD(K)) ENDDO IF (NI .EQ. 6) THEN NCOL = 221 ENDIF IF (NI .EQ. 5) THEN NCOL = 111 ENDIF IF (NI .EQ. 4) THEN NCOL = 31 ENDIF IF (NI .EQ. 3) THEN NCOL = 171 ENDIF CALL PFILLER (XH,YH,NI,NCOL,NCOLLN) ENDDO ENDIF RETURN END SUBROUTINE TEKFACES SUBROUTINE TEKPREVIOUSNET(NCOL) use m_netw implicit none integer :: NCOL integer :: k integer :: k1 integer :: k2 integer :: l integer :: ndraw COMMON /DRAWTHIS/ NDRAW(40) IF (NDRAW(16) .LE. 0) RETURN CALL SETCOL(NCOL) DO L = 1,NUML0 K1 = KN0(1,L) K2 = KN0(2,L) IF (K1 .NE. 0 .AND. K2 .NE. 0) THEN CALL DMOVABS( XK0(K1),YK0(K1),ZK0(K1) ) CALL DLNABS( XK0(K2),YK0(K2),ZK0(K2) ) ENDIF ENDDO END SUBROUTINE TEKPREVIOUSNET SUBROUTINE DISPFLOWNODEVALS(KP) use m_flowgeom use m_flow USE M_DEVICES implicit none DOUBLE PRECISION :: ZNOD integer :: KP integer :: l integer :: n CHARACTER TEX*23 IF (KP .EQ. 0) RETURN CALL DRCIRC(XZ(KP),YZ(KP),BL(KP)) TEX = 'NODE NR : ' WRITE(TEX (14:),'(I10)') KP CALL KTEXT(TEX,IWS-22,4,15) TEX = 'X COORD : ' WRITE(TEX (14:),'(E10.3)') Xz(KP) CALL KTEXT(TEX,IWS-22,13,15) TEX = 'Y COORD : ' WRITE(TEX (14:),'(E10.3)') Yz(KP) CALL KTEXT(TEX,IWS-22,14,15) TEX = 'Z COORD : ' WRITE(TEX (14:),'(E10.3)') bl(KP) CALL KTEXT(TEX,IWS-22,15,15) TEX = 'Z COORD : ' WRITE(TEX (14:),'(e10.4)') znod(kp) CALL KTEXT(TEX,IWS-22,16,15) TEX = 'link : ' DO N = 1,Nd(kp)%lnx L = ND(KP)%LN(N) WRITE(TEX ( 6:11),'(I6 )') N WRITE(TEX (14:23),'(I10)') L CALL KTEXT(TEX,IWS-22,16+N,15) ENDDO end SUBROUTINE DISPFLOWNODEVALS SUBROUTINE DISPNODEVALS(KP) use m_netw USE M_DEVICES implicit none integer :: KP double precision :: fff double precision :: fxx double precision :: fyy double precision :: fzz integer :: l integer :: n CHARACTER TEX*23 IF (KP .EQ. 0) RETURN CALL DRCIRC(XK(KP),YK(KP),ZK(KP)) TEX = 'NODE NR : ' WRITE(TEX (14:),'(I10)') KP CALL KTEXT(TEX,IWS-22,4,15) TEX = 'X COORD : ' WRITE(TEX (14:),'(E10.3)') XK(KP) CALL KTEXT(TEX,IWS-22,13,15) TEX = 'Y COORD : ' WRITE(TEX (14:),'(E10.3)') YK(KP) CALL KTEXT(TEX,IWS-22,14,15) TEX = 'Z COORD : ' WRITE(TEX (14:),'(E10.3)') ZK(KP) CALL KTEXT(TEX,IWS-22,15,15) TEX = 'ELEM : ' DO N = 1,NMK(KP) L = NOD(KP)%LIN(N) WRITE(TEX ( 6:11),'(I6 )') N WRITE(TEX (14:23),'(I10)') L CALL KTEXT(TEX,IWS-22,15+N,15) ENDDO if (netflow .eq. 2) return TEX = 'NR OF ELEMS: ' WRITE(TEX (14:),'(I10)') NMK(KP) CALL KTEXT(TEX,IWS-22,6,15) RETURN END SUBROUTINE DISPNODEVALS SUBROUTINE NETLINKVALS(MET,NCOL) USE m_flowgeom, ONLY : XZ, YZ, lne2ln USE M_MISSING use network_data use m_alloc use m_flow, only: cftrt implicit none integer :: MET, NCOL integer :: jacftrt double precision :: ag double precision :: cfl double precision :: dv double precision :: e0 double precision :: eal double precision :: eps double precision :: fsp integer :: jaauto integer :: k1, k2, L, jaxz, kL, kR integer :: ncols integer :: nie integer :: nis integer :: nv double precision :: pi double precision :: rd double precision :: rek double precision :: rho double precision :: rhow double precision :: sp double precision :: uu double precision :: v double precision :: val double precision :: vmax double precision :: vmin double precision :: VV, WW, X3, Y3, X4, Y4 double precision :: xd, YD, ZD, DBDISTANCE, DCOSPHI double precision :: areaL, areaR, xc, yc, aa double precision, external :: topo_info COMMON /CONSTANTS/ E0, RHO, RHOW, CFL, EPS, AG, PI COMMON /DEPMAX/ VMAX,VMIN,DV,VAL(256),NCOLS(256),NV,NIS,NIE,JAAUTO IF (MET .EQ. 1) RETURN jaxz = 0 if (allocated (xz)) then jaxz = 1 end if jacftrt = 0 if (allocated (cftrt)) then jacftrt = 1 end if ! refresh netcell administartion, based on module variable netstat if ( netstat /= NETSTAT_OK ) call findcells(100) IF (MET .EQ. 15 .or. MET.EQ.16) THEN ! topology information call makenetnodescoding() END IF if ( numL.gt.size(rlin) ) then call realloc(rlin,numL) end if DO L = 1,NUML V = dmiss K1 = KN(1,L) K2 = KN(2,L) IF (K1 .NE. 0 .AND. K2 .NE. 0) THEN IF (MET .EQ. 2) THEN V = L ELSE IF (MET .EQ. 3) THEN CALL DHITEXT(K1,XK(K1),YK(K1),ZK(K1)) CALL DHITEXT(K2,XK(K2),YK(K2),ZK(K2)) ELSE IF (MET .EQ. 4) THEN IF (NUMP > 0 .and. jaxz == 1 .and. L <= size(LNN)) THEN IF (LNN(L) == 2) THEN X3 = XZ(iabs(LNE(1,L))) X4 = XZ(iabs(LNE(2,L))) Y3 = YZ(iabs(LNE(1,L))) Y4 = YZ(iabs(LNE(2,L))) V = DCOSPHI(XK(K1), YK(K1), XK(K2), YK(K2), X3, Y3, X4, Y4 ) if (v /= dmiss) then v = abs(v) end if ENDIF ENDIF ELSE IF (MET .EQ. 5) THEN if ( size(lne2ln) .ge. numl) then V = lne2ln(L) else v = 0 endif ELSE IF (MET .EQ. 6) THEN V = LC(L) ELSE IF (MET .EQ. 7) THEN if (lc(L) > 0) V = netbr(LC(L))%nx ELSE IF (MET .GE. 7 .AND. MET .LE. 9) THEN XD = XK(K2) - XK(K1) YD = YK(K2) - YK(K1) ZD = ZK(K2) - ZK(K1) RD = SQRT(XD*XD + YD*YD + ZD*ZD) REK = 0 ! ( RD - RL(L) ) / RL(L) IF (LC(L) .EQ. 0) REK = MAX(0d0,REK) SP = E0*REK FSP = 0 ! SP*EA(L)/1e3 ! spanning in kN IF (MET .EQ. 9) THEN V = 0d0 ! TODO: AvD: Mag weg ENDIF ELSE IF (MET .EQ. 10) THEN V = DBDISTANCE( XK(K1), YK(K1), XK(K2), YK(K2) ) ELSE IF (MET .EQ. 11) THEN V = KN(3,L) ELSE IF (MET .EQ. 12) THEN V = 0 IF ( L <= SIZE(LNN) ) V = LNN(L) ELSE IF (MET .EQ. 13) THEN V = 0 IF (L <= SIZE(LNN)) V = LNE(1,L) ELSE IF (MET .EQ. 14) THEN V = 0 IF (L <= SIZE(LNN)) V = LNE(2,L) ELSE IF (MET .EQ. 15) THEN ! topology information V = topo_info(L) ELSE IF (MET .EQ. 16) THEN ! area ratio if ( lnn(L).lt.2 ) then V = dmiss else kL = lne(1,L) kR = lne(2,L) call getcellsurface(kL,areaL,xc,yc) call getcellsurface(kR,areaR,xc,yc) if ( areaL.lt.1d-12 .or. areaR.lt.1d-12 ) cycle V = areaR/areaL if ( V.lt.1d0 ) V = 1d0/V end if ELSE IF (MET .EQ. 17) THEN ! link size criterion if ( lnn(L).lt.2 ) then V = dmiss else kL = lne(1,L) kR = lne(2,L) call getcellsurface(kL,areaL,xc,yc) call getcellsurface(kR,areaR,xc,yc) if ( areaL.lt.1d-12 .or. areaR.lt.1d-12 ) cycle k1 = kn(1,L) k2 = kn(2,L) aa = dbdistance(xk(k1), yk(k1), xk(k2), yk(k2) ) * dbdistance(xz(kL), yz(kL), xz(kR), yz(kR) ) V = aa / (areaR+areaL) end if ELSE IF (MET .EQ. 18) THEN if (jacftrt .eq. 1) then V = cftrt(L,2) else V = 0 end if ENDIF RLIN(L) = V ENDIF ENDDO RETURN END SUBROUTINE NETLINKVALS SUBROUTINE NETNODEVALS(MET) USE M_FLOW USE M_FLOWGEOM use m_netw use m_sediment USE M_MISSING implicit none integer :: MET integer :: k, L, j, K1, K2, K3,K4 double precision :: x, y, z, uar double precision :: xn, yn, dis, rL ! for smallest distance to land boundary (method=7) IF (MET .EQ. 1) RETURN IF (MET == 9) THEN RNOD = 0D0 ! u1 = yu*csu DO L = 1,LNXi K3 = LNCN(1,L) K4 = LNCN(2,L) ! UAR = U1(L) K1 = LN(1,L) K2 = LN(2,L) UAR = CSU(L)*( ACL(L)*UCX(K1) + (1D0-ACL(L))*UCX(K2) ) + & SNU(L)*( ACL(L)*UCY(K1) + (1D0-ACL(L))*UCY(K2) ) UAR = UAR*DX(L) RNOD(K3) = RNOD(K3) - UAR RNOD(K4) = RNOD(K4) + UAR ENDDO DO L = LNXi+1,lnx K3 = LNCN(1,L) K4 = LNCN(2,L) UAR = DX(L)*(1d0-acl(L))*U1(L) RNOD(K3) = RNOD(K3) - UAR RNOD(K4) = RNOD(K4) + UAR ENDDO do k = 1, mxwalls k3 = walls(2,k) k4 = walls(3,k) if (irov == 0) then RNOD(K3) = 0d0 RNOD(K4) = 0d0 else if (irov == 1) then uar = walls(16,k) else if (irov == 2) then uar = 0.d0 ! walls(16,k) ! *(1d0/walls(6,k) - 1d0/vonkar) endif UAR = 0.5d0*UAR*WALLS(9,K) RNOD(K3) = RNOD(K3) + UAR RNOD(K4) = RNOD(K4) + UAR endif enddo DO K = 1,NUMK IF (BAN(K) > 0D0) THEN RNOD(K) = RNOD(K) / BAN(K) ENDIF ENDDO ELSE DO K = 1,NUMK X = XK(K) Y = YK(K) Z = ZK(K) IF (MET .EQ. 2) THEN RNOD(K) = K ELSE IF (MET .EQ. 3) THEN RNOD(K) = NMK(K) ELSE IF (MET .EQ. 5) THEN if (allocated(NB)) then if (size(NB) /= NUMK) then exit else RNOD(K) = NB(K) end if else RNOD(K) = 0 end if ELSE IF (MET .EQ. 6) THEN RNOD(K) = ZK(K) ELSE IF (MET .EQ. 7) THEN call toland(x,y,1,MXLAN,1,xn,yn,dis,j,rL) rnod(k) = dis ELSE IF (MET .EQ. 8 .and. jased > 0 .and. jaceneqtr > 1) THEN RNOD(K) = grainlay(jgrtek,k) ! erodable layer ELSE IF (MET .EQ. 10) THEN RNOD(k) = BAN(K) ENDIF ENDDO ENDIF RETURN END SUBROUTINE NETNODEVALS SUBROUTINE MINMXNETLINS() use m_netw USE M_MISSING implicit none double precision :: dv integer :: i integer :: jaauto integer :: k1 integer :: k2 integer :: l integer :: ncols integer :: nie integer :: nis integer :: nv double precision :: rd double precision :: rmax double precision :: rmin double precision :: val double precision :: vmax double precision :: vmin double precision :: xp1 double precision :: xp2 double precision :: yp1 double precision :: yp2 double precision :: zp1 double precision :: zp2 ! BEPAAL MINIMUM EN MAXIMUM VAN WAARDES BINNEN VIEWING AREA LOGICAL DINVIEW COMMON /DEPMAX2/ VMAX,VMIN,DV,VAL(256),NCOLS(256),NV,NIS,NIE,JAAUTO IF (JAAUTO .EQ. 1) THEN RMIN = 1.0D30 linmin = 0 RMAX = -1.0d30 linmax = 0 DO L = 1,NUML K1 = KN(1,L) K2 = KN(2,L) IF (RLIN(L) .NE. DMISS .AND. K1 .NE. 0 .AND. K2 .NE. 0) THEN XP1 = XK(K1) YP1 = YK(K1) ZP1 = ZK(K1) XP2 = XK(K2) YP2 = YK(K2) ZP2 = ZK(K2) IF (DINVIEW(XK(K1),YK(K1),ZK(K1)) .OR. DINVIEW(XK(K2),YK(K2),ZK(K2)) ) THEN RD = RLIN(L) IF (RD < RMIN) THEN RMIN = RD LINMIN = L ENDIF IF (RD > RMAX) THEN RMAX = RD LINMAX = L ENDIF ENDIF ENDIF ENDDO VMAX = RMAX VMIN = RMIN ENDIF DV = VMAX - VMIN DO I = 1,NV VAL(I) = VMIN + (I-1)*DV/(NV-1) ENDDO RETURN END SUBROUTINE MINMXNETLINS SUBROUTINE MINMXNETNODS() use m_netw use m_missing implicit none integer :: i, k double precision :: rd, rmax, rmin LOGICAL DINVIEW double precision :: VMAX, VMIN, DV, VAL integer :: NCOLS,NV,NIS,NIE,JAAUTO COMMON /DEPMAX/ VMAX,VMIN,DV,VAL(256),NCOLS(256),NV,NIS,NIE,JAAUTO ! BEPAAL MINIMUM EN MAXIMUM VAN DIEPTES BINNEN VIEWING AREA IF (JAAUTO .EQ. 1) THEN RMIN = 1.0D30 NODMIN = 0 RMAX = -1.0D30 NODMAX = 0 DO K = 1,NUMK IF ( DINVIEW(XK(K),YK(K),ZK(K)) ) THEN RD = RNOD(K) IF (rd .ne. dmiss) then IF (RD < RMIN ) THEN RMIN = RD NODMIN = K ENDIF IF (RD > RMAX) THEN RMAX = RD NODMAX = K ENDIF ENDIF ENDIF ENDDO VMAX = RMAX VMIN = RMIN ENDIF DV = VMAX - VMIN DO I = 1,NV VAL(I) = VMIN + (I-1)*DV/(NV-1) ENDDO RETURN END SUBROUTINE MINMXNETNODS SUBROUTINE MINMXNETCELLS() use m_netw use m_flowgeom use m_missing implicit none double precision :: dv integer :: i integer :: jaauto integer :: k integer :: ncols integer :: nie integer :: nis integer :: nv double precision :: rd double precision :: rmax double precision :: rmin double precision :: val double precision :: vmax double precision :: vmin double precision, external :: znetcell ! BEPAAL MINIMUM EN MAXIMUM VAN DIEPTES BINNEN VIEWING AREA LOGICAL DINVIEW COMMON /DEPMAX/ VMAX,VMIN,DV,VAL(256),NCOLS(256),NV,NIS,NIE,JAAUTO IF (JAAUTO .EQ. 1) THEN RMIN = 1.0D30 NODMIN = 0 RMAX = -1.0D30 NODMAX = 0 DO K = 1,max(NUMP,nump1d2d) IF ( DINVIEW(XZ(K),YZ(K),YZ(K)) ) THEN RD = RLIN(K) IF (rd .ne. dmiss) then IF (RD < RMIN ) THEN RMIN = RD netcelMIN = K ENDIF IF (RD > RMAX) THEN RMAX = RD netcelMAX = K ENDIF ENDIF ENDIF ENDDO VMAX = RMAX VMIN = RMIN ENDIF DV = VMAX - VMIN DO I = 1,NV VAL(I) = VMIN + (I-1)*DV/(NV-1) ENDDO RETURN END SUBROUTINE MINMXNETCELLS SUBROUTINE TEKNODEVALS(MET) USE M_MISSING use m_netw use unstruc_colors ! , ONLY :NCOLWARN1, ncolhl implicit none integer :: MET double precision :: d integer :: jav integer :: jview integer :: k1, k integer :: k2 integer :: key integer :: l integer :: n integer :: ncol double precision :: rd double precision :: vv double precision :: xyz DOUBLE PRECISION XD,YD,ZD,DX,DY,DZ,XX1,YY1,ZZ1,XX2,YY2,ZZ2,X3,Y3,Z3,H double precision :: X(4), Y(4), Z(4) double precision :: getrcir, getdx, getdy LOGICAL INVNOD, inview COMMON /HOWTOVIEW/ JVIEW, JAV, XYZ ! 1,2,3 OF 4 integer :: NCOLS,NV,NIS,NIE,JAAUTO double precision :: VMAX,VMIN,DV,VAL COMMON /DEPMAX/ VMAX,VMIN,DV,VAL(256),NCOLS(256),NV,NIS,NIE,JAAUTO KMOD = MAX(1,NUMK/100) H = 0.5d0 if (met == 3) then ! smooth iso of netnode stuff based upon netcells if ( numk + numl .ne. lasttopology ) THEN ! coarsening info if ( ubound(lnn,1).ne.numL ) then call findcells(100) endif endif do k = 1,nump IF (MOD(K,KMOD) .EQ. 0) THEN CALL HALT2(KEY) IF (KEY .EQ. 1) then RETURN end if ENDIF IF (inview(xzw(k), yzw(k) ) ) then call isosmoothnet(k) endif enddo else IF (MET .Gt. 3) THEN D = 0.5D0*GETRCIR() ! DO K1 = 1,NUMK IF (MOD(K1,KMOD) .EQ. 0) THEN CALL HALT2(KEY) IF (KEY .EQ. 1) then RETURN end if ENDIF IF (.NOT. INVNOD(K1)) CYCLE VV = RNOD(K1) XX1 = XK(K1) YY1 = YK(K1) ZZ1 = ZK(K1) IF (VV .NE. dmiss) THEN CALL ISOCOL(VV,NCOL) IF (MET .EQ. 3 .OR. MET .EQ. 4 .OR. & MET .EQ. 6 .OR. MET .EQ. 7 ) THEN DO N = 1,NMK(K1) L = NOD(K1)%LIN(N) CALL OTHERNODE(K1,L,K2) IF (K2 == 0) then CYCLE end if XX2 = H*(XK(K2)+XX1) YY2 = H*(YK(K2)+YY1) ZZ2 = H*(ZK(K2)+ZZ1) IF (MET .EQ. 6) THEN CALL DMOVABS(XX1,YY1,ZZ1) CALL DLNABS(XX2,YY2,ZZ2) ELSE IF (MET .EQ. 4 .OR. MET .EQ. 7) THEN ! XD = getdx (XX1, yy1, xx2, yy2) ! YD = getdy (XX1, yy1, xx2, yy2) call getdxdy(XX1, yy1, xx2, yy2, xd, yd) RD = SQRT(XD*XD + YD*YD) IF (RD .NE. 0) THEN IF (JVIEW .EQ. 1 .OR. JVIEW .EQ. 4) THEN DX = -D*YD/RD DY = D*XD/RD DZ = 0 ELSE IF (JVIEW .EQ. 2) THEN DZ = -D*YD/RD DY = D*ZD/RD DX = 0 ELSE IF (JVIEW .EQ. 3) THEN DX = -D*ZD/RD DZ = D*XD/RD DY = 0 ENDIF CALL DRIETWEE(XX2+DX,YY2+DY,ZZ2+DZ,X(1),Y(1),Z(1)) CALL DRIETWEE(XX1+DX,YY1+DY,ZZ1+DZ,X(2),Y(2),Z(2)) CALL DRIETWEE(XX1-DX,YY1-DY,ZZ1-DZ,X(3),Y(3),Z(3)) CALL DRIETWEE(XX2-DX,YY2-DY,ZZ2-DZ,X(4),Y(4),Z(4)) CALL pfiller(X,Y,4,ncol,ncol) !CALL IGRJOIN(real(x(1)),real(y(1)),real(x(2)),real(y(2))) ENDIF ENDIF ENDDO ELSE IF (MET .EQ. 5 .OR. MET .EQ. 8) THEN CALL DRCIRC(XX1,YY1,ZZ1) ELSE IF (MET == 9) THEN IF (VV .NE. dmiss .and. VV < vmin + 0.05d0*(vmax-vmin)) THEN CALL CIRR(Xx1,Yy1,ncolhl) endif ELSE IF (MET == 10) THEN IF (VV .NE. dmiss .and. VV > vmax - 0.05d0*(vmax-vmin)) THEN CALL CIRR(Xx1,Yy1,ncolhl) endif ENDIF ELSE CALL CIRR(XX1,YY1,NCOLWARN1) ENDIF ENDDO ENDIF RETURN END SUBROUTINE TEKNODEVALS SUBROUTINE TEKNODENUMS(MET,NCOL) USE M_MISSING use m_netw implicit none integer :: MET, NCOL integer :: k integer :: k1 integer :: k2 integer :: key integer :: l integer :: n integer :: ndraw COMMON /DRAWTHIS/ NDRAW(40) LOGICAL INVNOD DOUBLE PRECISION X, Y, Z CALL SETCOL(NCOL) KMOD = MAX(1,NUMK/100) DO K = 1,NUMK IF (.NOT. INVNOD(K)) CYCLE X = XK(K) Y = YK(K) Z = ZK(K) IF (MOD(K,KMOD) .EQ. 0) THEN CALL HALT2(KEY) IF (KEY .EQ. 1) then RETURN end if ENDIF IF (RNOD(K) .NE. dmiss) THEN IF (MET .EQ. 2 .OR. MET .GE. 6) THEN IF (NDRAW(8) .EQ. 2 .OR. NDRAW(8) .EQ. 3 .OR. NDRAW(8) .EQ. 5 ) THEN CALL DHITEXT(INT(RNOD(K)),X,Y,Z) ELSE IF (MET .EQ. 4) THEN DO N = 1,NMK(K) L = NOD(K)%LIN(N) K1 = KN(1,L) K2 = KN(2,L) X = 0.5d0*(XK(K1) + 0.5d0*XK(K2)) Y = 0.5d0*(YK(K1) + 0.5d0*YK(K2)) Z = 0.5d0*(ZK(K1) + 0.5d0*ZK(K2)) CALL DHITEXT(L,X,Y,Z) ENDDO ELSE CALL dHTEXT(dble(RNOD(K)),X,Y,Z) ENDIF ENDIF ENDIF ENDDO RETURN END SUBROUTINE TEKNODENUMS SUBROUTINE TEKLINKVALS(MET) USE M_MISSING use m_netw use unstruc_colors, only: ncolhl implicit none integer :: MET double precision :: d integer :: jav integer :: jview integer :: k1 integer :: k2 integer :: l integer :: ncol, key double precision :: rd double precision :: vv double precision :: xyz DOUBLE PRECISION XD,YD,ZD,DX,DY,DZ,XX1,YY1,ZZ1,XX2,YY2,ZZ2,X3,Y3,Z3 double precision :: X(4), Y(4), Z(4), GETRCIR, getdx, getdy, dbdistance logical :: invnod integer :: NCOLS,NV,NIS,NIE,JAAUTO double precision :: VMAX,VMIN,DV,VAL COMMON /DEPMAX2/ VMAX,VMIN,DV,VAL(256),NCOLS(256),NV,NIS,NIE,JAAUTO COMMON /HOWTOVIEW/ JVIEW, JAV, XYZ ! 1,2,3 OF 4 D = 0.5D0*GETRCIR() ! IF (MET .GE. 3) THEN LMOD = MAX(1,NUML/100) DO L = 1,NUML IF (MOD(L,LMOD) .EQ. 0) THEN CALL HALT2(KEY) IF (KEY .EQ. 1) then RETURN end if ENDIF VV = RLIN(L) IF (VV .NE. dmiss) THEN K1 = KN(1,L) K2 = KN(2,L) IF (K1 .NE. 0 .AND. K2 .NE. 0) THEN IF (.NOT. INVNOD(K1) .and. .NOT. INVNOD(K2) ) CYCLE XX1 = XK(K1) YY1 = YK(K1) ZZ1 = ZK(K1) XX2 = XK(K2) YY2 = YK(K2) ZZ2 = ZK(K2) CALL ISOCOL2(VV,NCOL) IF (MET .EQ. 3 .OR. MET .EQ. 6) THEN CALL DMOVABS(XX1,YY1,ZZ1) CALL DLNABS(XX2,YY2,ZZ2) ELSE IF (MET .EQ. 4 .OR. MET .EQ. 7) THEN !XD = getdx (XX1, yy1, xx2, yy2) !YD = getdy (XX1, yy1, xx2, yy2) call getdxdy(XX1, yy1, xx2, yy2, xd, yd) RD = sqrt(xd*xd + yd*yd) IF (RD .NE. 0) THEN IF (JVIEW .EQ. 1 .OR. JVIEW .EQ. 4) THEN DX = -D*YD/RD DY = D*XD/RD DZ = 0 ELSE IF (JVIEW .EQ. 2) THEN DZ = -D*YD/RD DY = D*ZD/RD DX = 0 ELSE IF (JVIEW .EQ. 3) THEN DX = -D*ZD/RD DZ = D*XD/RD DY = 0 ENDIF CALL DRIETWEE(XX2+DX,YY2+DY,ZZ2+DZ,X(1),Y(1),Z(1)) CALL DRIETWEE(XX1+DX,YY1+DY,ZZ1+DZ,X(2),Y(2),Z(2)) CALL DRIETWEE(XX1-DX,YY1-DY,ZZ1-DZ,X(3),Y(3),Z(3)) CALL DRIETWEE(XX2-DX,YY2-DY,ZZ2-DZ,X(4),Y(4),Z(4)) CALL pfiller(X,Y,4,ncol,ncol) CALL IGRJOIN(real(x(1)),real(y(1)),real(x(2)),real(y(2))) ENDIF ELSE IF (MET .EQ. 5 .OR. MET .EQ. 8) THEN X3 = 0.5d0*(XX1+XX2) Y3 = 0.5d0*(YY1+YY2) Z3 = 0.5d0*(ZZ1+ZZ2) CALL DRCIRC(X3,Y3,Z3) ELSE IF (MET == 9) THEN IF (VV .NE. dmiss .and. VV < vmin + 0.05d0*(vmax-vmin)) THEN X3 = 0.5d0*(XX1+XX2) Y3 = 0.5d0*(YY1+YY2) Z3 = 0.5d0*(ZZ1+ZZ2) CALL CIRR(X3,Y3,ncolhl) endif ELSE IF (MET == 10) THEN IF (VV .NE. dmiss .and. VV > vmax - 0.05d0*(vmax-vmin)) THEN X3 = 0.5d0*(XX1+XX2) Y3 = 0.5d0*(YY1+YY2) Z3 = 0.5d0*(ZZ1+ZZ2) CALL CIRR(X3,Y3,ncolhl) endif ENDIF ENDIF ENDIF ENDDO ENDIF RETURN END SUBROUTINE TEKLINKVALS SUBROUTINE TEKLINKNUMS(MET,NCOL) USE M_MISSING use m_netw implicit none integer :: MET, NCOL integer :: k1 integer :: k2 integer :: key integer :: l integer :: ndraw double precision :: vv logical :: invnod COMMON /DRAWTHIS/ NDRAW(40) DOUBLE PRECISION XP,YP,ZP CALL SETCOL(NCOL) IF (MET .EQ. 2 .OR. MET .GE. 6 .and. MET .LE. 8) THEN LMOD = MAX(1,NUML/100) DO L = 1,NUML IF (MOD(L,LMOD) .EQ. 0) THEN CALL HALT2(KEY) IF (KEY .EQ. 1) then RETURN end if ENDIF VV = RLIN(L) IF (VV .NE. dmiss) THEN K1 = KN(1,L) K2 = KN(2,L) IF (K1 .NE. 0 .AND. K2 .NE. 0) THEN IF (.NOT. INVNOD(K1) .and. .NOT. INVNOD(K2)) CYCLE XP = 0.5d0*(XK(K1) + XK(K2)) YP = 0.5d0*(YK(K1) + YK(K2)) ZP = 0.5d0*(ZK(K1) + ZK(K2)) IF (NDRAW(7) .EQ. 2 .OR. NDRAW(7) .EQ. 3 .OR. (NDRAW(7) >= 10 .and. ndraw(7).ne.16 .and. ndraw(7).ne.17 .and. ndraw(7).ne.18)) THEN CALL DHITEXT(INT(VV),XP,YP,ZP) ELSE CALL DHTEXT(VV,XP,YP,ZP) ENDIF ENDIF ENDIF ENDDO ENDIF RETURN END SUBROUTINE TEKLINKNUMS SUBROUTINE SETLINKCOLOUR(L,NCOL) use m_netw use unstruc_colors implicit none integer :: L, NCOL, NCL IF (NCOL == 0) THEN ! ERASE NCL = 0 ELSE IF (NCOL == 1) THEN ! 1 MEANS: DRAW IN KN3 PREDEFINED COLOUR if (KN(3,L) == 0) then NCL = 31 else IF (KN(3,L) == 1) THEN ! 1D NCL = NCOLRG else IF (KN(3,L) == 2) THEN ! 2D NCL = NCOLDN else IF (KN(3,L) == 3) THEN ! 1d2d NCL = NCOLNN ENDIF ELSE NCL = NCOL ENDIF CALL SETCOL(NCL) RETURN END SUBROUTINE TEKLINK(L,NCOL) use m_netw use unstruc_colors implicit none integer :: L, NCOL integer :: jaSmallCir double precision :: dlength integer :: k1 integer :: k2 CALL SETLINKCOLOUR(L,NCOL) K1 = KN(1,L) K2 = KN(2,L) IF (K1 .NE. 0 .AND. K2 .NE. 0) THEN CALL MOVABS( XK(K1),YK(K1) ) CALL LNABS( XK(K2),YK(K2) ) IF (NCOL > 0) THEN CALL SETCOL(NCOLNN) CALL PTABS(XK(K1),YK(K1) ) CALL PTABS(XK(K2),YK(K2) ) ENDIF ENDIF RETURN END SUBROUTINE TEKLINK SUBROUTINE TEKNODE(KP,NCOL) use m_netw use unstruc_colors implicit none integer :: KP, NCOL integer :: k1 integer :: k2 integer :: l integer :: n CALL SETCOL(NCOL) DO N = 1,NMK(KP) L = NOD(KP)%LIN(N) K1 = KN(1,L) K2 = KN(2,L) if (k1 > 0 .and. k2 > 0) then CALL DMOVABS( XK(K1),YK(K1),ZK(K1) ) CALL DLNABS( XK(K2),YK(K2),ZK(K2) ) endif ENDDO IF (NCOL > 0) THEN CALL SETCOL(NCOLNN) DO N = 1,NMK(KP) L = NOD(KP)%LIN(N) K1 = KN(1,L) K2 = KN(2,L) if (k1 > 0) then CALL DPTABS( XK(K1),YK(K1),ZK(K1) ) endif if (k2 > 0) then CALL DPTABS( XK(K2),YK(K2),ZK(K2) ) endif ENDDO ENDIF IF (KC(KP) .EQ. -1) CALL DCIRR(XK(KP),YK(KP),ZK(KP),NCOL) RETURN END SUBROUTINE TEKNODE !> Highlights net/flow nodes and/or links, when specified in display parameters. subroutine highlight_nodesnlinks() use unstruc_display use unstruc_colors use network_data use m_flowgeom implicit none integer :: L ! if (jaHighlight /= 1) return if (nhlNetNode > 0 .and. nhlNetNode <= numk) then call cirr(xk(nhlNetNode), yk(nhlNetNode), ncolhl) end if if (nhlNetLink > 0 .and. nhlNetLink <= numl) then call cirr(.5d0*(xk(kn(1,nhlNetLink))+xk(kn(2,nhlNetLink))), & .5d0*(yk(kn(1,nhlNetLink))+yk(kn(2,nhlNetLink))), ncolhl) call teklink(nhlNetLink, ncolhl) end if if (nhlFlowNode > 0 .and. nhlFlowNode <= ndx) then call cirr(xz(nhlFlowNode), yz(nhlFlowNode), ncolhl) end if if (nhlFlowLink > 0 .and. nhlFlowLink <= lnx) then call cirr(xu(nhlFlowLink), yu(nhlFlowLink), ncolhl) end if end subroutine highlight_nodesnlinks SUBROUTINE D1ARROWS(X,Y,Z,U,V,W,PSI0,VFAC) implicit none double precision :: psi0 double precision :: vfac double precision :: X,Y,Z,U,V,W DOUBLE PRECISION XD,YD,ZD,XP,YP,ZP, & UD,VD,WD,UR,VR,WR XD = X YD = Y ZD = Z UD = U VD = V WD = W CALL DRIETWEE(XD,YD,ZD,XP,YP,ZP) CALL DRIETWEE(UD,VD,WD,UR,VR,WR) CALL ARROWS(XP,YP,UR,VR,PSI0,VFAC) RETURN END SUBROUTINE D1ARROWS SUBROUTINE VIEWCYCLE(KEY) implicit none double precision :: deltx double precision :: delty double precision :: deltz double precision :: dscr integer :: jav integer :: jview double precision :: wpqr double precision :: xyz double precision :: zfac double precision :: zupw integer :: KEY COMMON /HOWTOVIEW/ JVIEW, JAV, XYZ ! 1,2,3 OF 4 COMMON /PERSPX/ WPQR,DELTX,DELTY,DELTZ,ZFAC,DSCR,ZUPW JVIEW = JVIEW + 1 IF (JVIEW .GT. JAV) JVIEW = 1 KEY = 3 RETURN END SUBROUTINE VIEWCYCLE SUBROUTINE VIEMATn(the,phi) implicit none double precision :: cp double precision :: ct double precision :: deltx double precision :: delty double precision :: deltz double precision :: dscr double precision :: r double precision :: sp double precision :: st double precision :: t1 double precision :: t2 double precision :: t3 double precision :: t4 double precision :: vs double precision :: wpqr double precision :: x0s double precision :: y0s double precision :: z double precision :: zfac double precision :: zupw double precision :: the, phi ! ! Maak viewing matrix Vs ! phi (0 -- pi) en the (-pi/2 -- pi/2) : kijkhoekjes ! wpqr : oog-object in wereldcoor ! deltx,delty,deltz : kijk door dit punt in were ! zfac (negatief:op z'n kop) : oprekking verticaal ! Dscr : oog-scherm in wereldcoor ! Vs : Viewing matrix ! common /viewmat/ vs(4,4), x0s, y0s COMMON /PERSPX/ WPQR,DELTX,DELTY,DELTZ,ZFAC,DSCR,ZUPW dimension T1(4,4),T2(4,4),T3(4,4),T4(4,4),R(4,4),Z(4,4) T1 = 0 T2 = 0 T3 = 0 T4 = 0 R = 0 CT = COS(THE) ST = SIN(THE) CP = COS(PHI) SP = SIN(PHI) ! T1(1,1) = 1. T1(2,2) = 1. T1(3,3) = 1. ! ZFAC T1(4,4) = 1. T1(1,4) = -deltx T1(2,4) = -delty T1(3,4) = deltz ! *ZFAC ! T2(1,1) = 1. T2(2,2) = 1. T2(3,3) = 1. T2(4,4) = 1. T2(1,4) = -wpqr*CT*CP T2(3,4) = -wpqr*CT*SP ! WAS 2 T2(2,4) = -wpqr*ST ! WAS 3 ! T3(1,1) = CP T3(1,3) = SP T3(3,1) = -SP T3(3,3) = CP T3(2,2) = 1. T3(4,4) = 1. ! T4(1,1) = CT T4(1,2) = ST T4(2,1) = -ST T4(2,2) = CT T4(3,3) = 1. T4(4,4) = 1. ! R(1,2) = DSCR R(2,3) = DSCR R(3,1) = -1. R(4,4) = 1. ! nadat alles geinitialiseerd is de viewing transformatie-matr Vs = call matm4(R,T4,Z) call matm4(Z,T3,Vs) call matm4(Vs,T2,Z) call matm4(Z,T1,Vs) end SUBROUTINE VIEMATn SUBROUTINE MATM4(a,b,c) implicit none integer :: i integer :: j integer :: k ! matrix matrix double precision, dimension(4,4) :: a,b,c do 801 i = 1,4 do 801 k = 1,4 c(i,k) = 0d0 do 801 j = 1,4 c(i,k) = a(i,j) * b(j,k) + c(i,k) 801 continue end SUBROUTINE MATM4 ! ! subroutine viemat(the,phi) implicit none double precision :: cp double precision :: ct double precision :: deltx double precision :: delty double precision :: deltz double precision :: dscr double precision :: r double precision :: sp double precision :: st double precision :: t1 double precision :: t2 double precision :: t3 double precision :: t4 double precision :: vs double precision :: wpqr double precision :: x0s double precision :: y0s double precision :: z double precision :: zfac double precision :: zupw double precision :: the, phi common /viewmat/ vs(4,4), x0s, y0s COMMON /PERSPX/ WPQR,DELTX,DELTY,DELTZ,ZFAC,DSCR,ZUPW ! Maak viewing matrix Vs ! phi (0 -- pi) en the (-pi/2 -- pi/2) : kijkhoekjes ! wpqr : oog-object in wereldcoor ! deltx,delty,deltz : kijk door dit punt in were ! zfac (negatief:op z'n kop) : oprekking verticaal ! Dscr : oog-scherm in wereldcoor ! Vs : Viewing matrix ! dimension T1(4,4),T2(4,4),T3(4,4),T4(4,4),R(4,4),Z(4,4) T1 = 0 T2 = 0 T3 = 0 T4 = 0 R = 0 CT = COS(THE) ST = SIN(THE) CP = COS(PHI) SP = SIN(PHI) T1(1,1) = 1. T1(2,2) = 1. T1(3,3) = zfac T1(4,4) = 1. T1(1,4) = -deltx T1(2,4) = -delty T1(3,4) = -deltz*ZFAC T2(1,1) = 1. T2(2,2) = 1. T2(3,3) = 1. T2(4,4) = 1. T2(1,4) = -wpqr*ct*cp T2(3,4) = -wpqr*ct*sp T2(2,4) = -wpqr*st T3(1,1) = cp T3(1,3) = sp T3(3,1) = -sp T3(3,3) = cp T3(2,2) = 1. T3(4,4) = 1. T4(1,1) = ct T4(1,2) = st T4(2,1) = -st T4(2,2) = ct T4(3,3) = 1. T4(4,4) = 1. R(1,3) = Dscr R(2,2) = Dscr R(3,1) = -1. R(4,4) = 1. ! nadat alles geinitialiseerd is de viewing transformatie-matr Vs = call matm4(R,T4,Z) call matm4(Z,T3,Vs) call matm4(Vs,T2,Z) call matm4(Z,T1,Vs) end subroutine viemat SUBROUTINE TYPEVALUE(RD,KEY) USE M_DEVICES implicit none double precision :: rdin double precision :: RD integer :: KEY integer :: infoinput RDIN = RD CALL INPOPUP('ON') CALL INHIGHLIGHT('WHITE','RED') CALL INDOUBLEXYDEF(IWS/2-10,IHS-3,'VALUE : ',1,RD,11,'(F11.4)') KEY = InfoInput(55) IF (KEY .EQ. 23) THEN RD = RDIN ENDIF CALL INPOPUP('OFF') RETURN END SUBROUTINE TYPEVALUE SUBROUTINE CHADEP(XP,YP,RD,KEY) USE M_MISSING implicit none double precision :: XP,YP,RD INTEGER :: KEY double precision :: f double precision :: fac integer :: jplus double precision :: rdol CHARACTER WRDKEY*40 WRDKEY = 'CHANGE SCALAR VALUE' RDOL = RD JPLUS = 0 CALL DISPUT(21) 10 CONTINUE CALL DISVAL1(RD) CALL KCIR(XP,YP,RD) CALL INKEYEVENT(KEY) IF (KEY .EQ. 171) THEN CALL HELP(WRDKEY,3) ELSE IF (KEY .EQ. 45 .OR. KEY .EQ. 160) THEN IF (RD .EQ. dmiss) RD = 6.9d0 IF (JPLUS .NE. -1) THEN FAC = 1d0 F = MAX(.001d0,.01d0*RD) ENDIF RD = RD - F*FAC FAC = FAC*1.01d0 JPLUS = -1 ELSE IF (KEY .EQ. 43 .OR. KEY .EQ. 162) THEN IF (RD .EQ. dmiss) RD = 6.9d0 IF (JPLUS .NE. 1) THEN FAC = 1d0 F = MAX(.001d0,.01d0*RD) ENDIF RD = RD + F*FAC FAC = FAC*1.01d0 JPLUS = 1 ELSE IF (KEY .EQ. 32) THEN CALL TYPEVALUE(RD,KEY) CALL DISVAL1(RD) CALL KCIR(XP,YP,RD) RETURN ELSE IF (KEY .EQ. 68 .OR. KEY .EQ. 68+32 .OR. KEY .EQ. 143) THEN RD = dmiss CALL DISVAL1(RD) CALL KCIR(XP,YP,RD) RETURN ELSE IF (KEY .EQ. 27) THEN RD = RDOL CALL DISVAL1(RD) CALL KCIR(XP,YP,RD) RETURN ELSE IF (KEY .NE. 254 .AND. KEY .NE. 257) THEN RETURN ENDIF GOTO 10 END SUBROUTINE CHADEP SUBROUTINE DISVAL1(DEP) use unstruc_colors implicit none double precision :: DEP CHARACTER TEX*8 IF (ABS(DEP) .LT. 10) THEN WRITE(TEX(1:),'(F8.5)') DEP ELSE IF (ABS(DEP) .LT. 100) THEN WRITE(TEX(1:),'(F8.4)') DEP ELSE IF (ABS(DEP) .LT. 1000) THEN WRITE(TEX(1:),'(F8.3)') DEP ELSE IF (ABS(DEP) .LT. 10000) THEN WRITE(TEX(1:),'(F8.2)') DEP ELSE IF (ABS(DEP) .LT. 100000) THEN WRITE(TEX(1:),'(F8.1)') DEP ELSE WRITE(TEX(1:),'(E8.1)') DEP ENDIF CALL KTEXT(TEX,IWS-7,4,15) RETURN END SUBROUTINE DISVAL1 SUBROUTINE TEKSAM( XS,YS,ZS,NS,MET) use unstruc_colors use m_missing, only: DMISS use unstruc_opengl, only: jaopengl implicit none double precision :: deltx, RC double precision :: delty double precision :: deltz double precision :: dscr double precision :: hrc integer :: i, KMOD integer :: jastart integer :: key integer :: mcs integer :: ncol integer :: ncs integer :: ndraw integer :: ns1 double precision :: wpqr double precision :: x double precision :: xold double precision :: y double precision :: yold double precision :: z double precision :: zfac double precision :: zupw integer :: NS,MET double precision :: XS(NS), YS(NS), ZS(NS) ! TEKEN SAMPLES LOGICAL INVIEW COMMON /PERSPX/ WPQR,DELTX,DELTY,DELTZ,ZFAC,DSCR,ZUPW COMMON /DRAWTHIS/ NDRAW(40) COMMON /SAMPLESADM/ MCS,NCS,NS1 double precision :: VS(4,4) IF (NS .EQ. 0 .OR. MET .EQ. 0) RETURN IF (MET .EQ. 4 .OR. MET .EQ. 5) CALL SETTEXTSIZE() RC = 1.7d0*RCIR HRC = RCIR/2 JASTART = 0 XOLD = XS(1) YOLD = YS(1) KMOD = MAX(1,NS/100) key = 0 ! Fix for OpenGL rendering if ( jaopengl.eq.1 .and. MET.eq.1 ) then MET = 7 end if if (met <= 0) then return end if if (met == 5) then CALL SETCOL(KLSAM) else call minmxsam() endif DO 20 I = 1,NS IF (MOD(I,KMOD) .EQ. 0) THEN CALL HALT2(KEY) IF (KEY .EQ. 1) RETURN ENDIF X = XS(I) Y = YS(I) Z = ZS(I) if ( Z.EQ.DMISS ) cycle ! SPvdP: structured sample data may comprise missing values IF (INVIEW (X,Y) ) THEN IF (NDRAW(9) .EQ. 2) THEN ! CALL VIEW(XS(I),YS(I),ZS(I),X0S,Y0S,VS,X,Y,ZC) ENDIF IF (MET .ne. 5) THEN CALL ISOCOL2(Z,NCOL) ENDIF IF (MET .EQ. 1 .OR. MET .EQ. 2) THEN IF (NDRAW(9) .EQ. 1) THEN ! ! CALL MOVABS(X,Y) ! CALL CIR(RCIR) !! CALL HTEXT(ZS(I),X,Y) call box(x-0.5d0*rcir,y-0.5d0*rcir,x+0.5d0*rcir,y+0.5d0*rcir) IF (MET .EQ. 2) THEN CALL MOVABS(X,Y) CALL IGRFILLPATTERN(0,0,0) CALL SETCOL(1) CALL CIR(RCIR) CALL IGRFILLPATTERN(4,0,0) ENDIF ELSE IF (NDRAW(9) .EQ. 2) THEN IF (MET .EQ. 1) THEN ! CALL PERREC(XS(I),YS(I),ZS(I),RC,NCOL,NCOL) ELSE ! CALL PERREC(XS(I),YS(I),ZS(I),RC,NCOL,0) ENDIF ENDIF ELSE IF (MET .EQ. 3) THEN CALL PTABS(X,Y) ELSE IF (MET .EQ. 4 .OR. MET .EQ. 5) THEN CALL HTEXT(ZS(I),X,Y) ELSE IF (MET .EQ. 6) THEN CALL MOVABS(X,Y) CALL CIR(RCIR) CALL HTEXT(ZS(I),X+rcir,Y) ELSE IF (MET .EQ. 7) THEN CALL KREC5(X,Y,HRC,HRC) ENDIF ELSE JASTART = 0 ENDIF 20 CONTINUE CALL IGRFILLPATTERN(4,0,0) CALL IGRCHARDIRECTION('H') RETURN END SUBROUTINE TEKSAM SUBROUTINE TEKOBS( XS,YS,ZS,NS,MET) use unstruc_colors implicit none double precision :: deltx, RC double precision :: delty double precision :: deltz double precision :: dscr double precision :: hrc integer :: i, KMOD integer :: jastart integer :: key integer :: mcs integer :: ncol integer :: ncs integer :: ndraw integer :: ns1 double precision :: wpqr double precision :: x double precision :: xold double precision :: y double precision :: yold double precision :: z double precision :: zfac double precision :: zupw integer :: NS,MET double precision :: XS(NS), YS(NS), ZS(NS) ! TEKEN SAMPLES LOGICAL INVIEW COMMON /PERSPX/ WPQR,DELTX,DELTY,DELTZ,ZFAC,DSCR,ZUPW COMMON /DRAWTHIS/ NDRAW(40) COMMON /SAMPLESADM/ MCS,NCS,NS1 double precision :: VS(4,4) IF (NS .EQ. 0) RETURN IF (MET .EQ. 4 .OR. MET .EQ. 5) CALL SETTEXTSIZE() RC = 1.7d0*RCIR HRC = RCIR/2 JASTART = 0 XOLD = XS(1) YOLD = YS(1) KMOD = MAX(1,NS/100) DO 20 I = 1,NS IF (MOD(I,KMOD) .EQ. 0) THEN CALL HALT2(KEY) IF (KEY .EQ. 1) RETURN ENDIF X = XS(I) Y = YS(I) Z = ZS(I) IF (INVIEW (X,Y) ) THEN IF (NDRAW(9) .EQ. 2) THEN ! CALL VIEW(XS(I),YS(I),ZS(I),X0S,Y0S,VS,X,Y,ZC) ENDIF IF (MET .EQ. 5) THEN CALL SETCOL(KLSAM) ELSE CALL ISOCOL(Z,NCOL) ENDIF IF (MET .EQ. 1 .OR. MET .EQ. 2) THEN IF (NDRAW(9) .EQ. 1) THEN CALL MOVABS(X,Y) CALL CIR(RCIR) ! CALL HTEXT(ZS(I),X,Y) IF (MET .EQ. 2) THEN CALL IGRFILLPATTERN(0,0,0) CALL SETCOL(1) CALL CIR(RCIR) CALL IGRFILLPATTERN(4,0,0) ENDIF ELSE IF (NDRAW(9) .EQ. 2) THEN IF (MET .EQ. 1) THEN ! CALL PERREC(XS(I),YS(I),ZS(I),RC,NCOL,NCOL) ELSE ! CALL PERREC(XS(I),YS(I),ZS(I),RC,NCOL,0) ENDIF ENDIF ELSE IF (MET .EQ. 3) THEN CALL PTABS(X,Y) ELSE IF (MET .EQ. 4 .OR. MET .EQ. 5) THEN CALL HTEXT(ZS(I),X,Y) ELSE IF (MET .EQ. 6) THEN CALL MOVABS(X,Y) CALL CIR(RCIR) CALL HTEXT(ZS(I),X+rcir,Y) ELSE IF (MET .EQ. 7) THEN CALL KREC(X,Y,ZS(I),HRC) ENDIF ELSE JASTART = 0 ENDIF 20 CONTINUE CALL IGRFILLPATTERN(4,0,0) CALL IGRCHARDIRECTION('H') RETURN END SUBROUTINE TEKOBS SUBROUTINE JGRLINE8(X,Y,N) ! TEKEN LIJN, INCL XYMISSEN, GEBRUIK VAN INVIEW EN PROJECTIE USE M_MISSING implicit none double precision :: X(N), Y(N) integer :: n integer :: i integer :: in integer :: k integer :: l double precision :: xa double precision :: ya integer, parameter :: KMAX=4096 ! BEPERKING VAN INTERACTER real :: XX(KMAX), YY(KMAX) LOGICAL, EXTERNAL :: INVIEW K = 0 L = 0 IN = 0 I=0 DO WHILE (I .LT. N) I = I + 1 IF ( X(I) .NE. dXYMIS) THEN IF ( INVIEW( X(I) ,Y(I) ) ) IN = 1 IF (K .EQ. 0 .OR. IN .EQ. 1 .OR. I .EQ. L+1) K = K + 1 IF (K .EQ. 1 .OR. IN .EQ. 1 .OR. I .EQ. L+1) THEN !XX(K) = XA ! YY(K) = YA XX(K) = X(i) YY(K) = Y(i) ENDIF IF (IN .EQ. 1) L = I ENDIF IF (I .EQ. N .OR. X(I) .EQ. dXYMIS .OR. K .EQ. KMAX) THEN IF (K .NE. 0) THEN CALL POLYLINE(XX,YY,K) IF (K .EQ. KMAX) I = I - 1 K = 0 L = 0 IN = 0 ENDIF ENDIF ENDDO RETURN END SUBROUTINE JGRLINE8 LOGICAL FUNCTION INVIEW2(X,Y,XX,YY) USE M_MISSING use m_wearelt implicit none double precision :: x,y,xx,yy ! ZIT IK IN ZOOMGEBIED? NULLEN EN DEFAULTS NIET, IN WERELDCOORD INVIEW2 = .FALSE. IF (X .NE. XYMIS) THEN CALL dPROJECT(X,Y,XX,YY,1) IF (XX .GT. X1 .AND. XX .LT. X2 .AND. & YY .GT. Y1 .AND. YY .LT. Y2 ) THEN INVIEW2 = .TRUE. ENDIF ELSE XX = XYMIS YY = XYMIS ENDIF RETURN END FUNCTION INVIEW2 SUBROUTINE dPROJECT(X8,Y8,XX4,YY4,MODE) use m_sferic implicit none double precision :: x8, y8, xx4, yy4 integer :: mode COMMON /SFERZOOM/ X0,Y0,FAC,X1W,Y1W,X2W,Y2W ! GRADEN double precision :: X0,Y0,FAC,X1W,Y1W,X2W,Y2W double precision :: X,Y,XX,YY,SX,CX,SY,CY,SY0,CY0,RR,C,SC,CC,RN double precision, save :: EPS = 1.D-20 X = X8 Y = Y8 IF (JSFERTEK .EQ. 0) THEN ! Just Transfer XX = X YY = Y ELSE IF (JSFERTEK .EQ. 1) THEN ! Stereographic SY0 = SIN(DG2RD*Y0) CY0 = COS(DG2RD*Y0) IF (MODE .EQ. 1) THEN ! LON,LAT to X,Y SX = SIN(DG2RD*(X-X0)) CX = COS(DG2RD*(X-X0)) SY = SIN(DG2RD*(Y)) CY = COS(DG2RD*(Y)) RN = 1.D0+SY0*SY+CY0*CY*CX IF (ABS(RN) .LT. EPS) THEN RN = SIGN(1.D0,RN)*EPS ENDIF RR = FAC*2.D0*RD2DG/RN ! FAC om naar X1,Y1,X2,Y2 te schalen XX = RR*CY*SX ! Stereographic to Degrees YY = RR*(CY0*SY-SY0*CY*CX) ELSE IF (MODE .EQ. 2) THEN ! X,Y to LON,LAT XX = X / FAC YY = Y / FAC RR = SQRT(XX*XX + YY*YY) IF (RR .GT. EPS) THEN SX = SIN(DG2RD*(XX-X0)) CX = COS(DG2RD*(XX-X0)) SY = SIN(DG2RD*(YY)) CY = COS(DG2RD*(YY)) C = 2.D0*ATAN2(RR,2.D0*RD2DG) SC = SIN(C) CC = COS(C) XX = X0*DG2RD + ATAN2(XX*SC,RR*CY0*CC-YY*SY0*SC) YY = ASIN(CC*SY0+YY*SC*CY0/RR) XX = XX*RD2DG YY = YY*RD2DG ELSE XX = X YY = Y ENDIF ENDIF ELSE IF (JSFERTEK .EQ. 2) THEN ! MERCATOR IF (MODE .EQ. 1) THEN IF (Y .GE. 89D0) Y = 89.D0 IF (Y .LE. -89D0) Y = -89.D0 YY = DG2RD*Y YY = DLOG( 1D0 + SIN(YY) ) / COS(YY) XX = DG2RD*X ELSE IF (MODE .EQ. 2) THEN YY = DATAN( SINH( Y ) ) YY = RD2DG*YY XX = RD2DG*X ENDIF ENDIF XX4 = XX YY4 = YY RETURN END SUBROUTINE dPROJECT SUBROUTINE TEKTRI(XL,YL,NCOL) implicit none integer :: ncol double precision :: XL(3),YL(3) CALL SETCOL(NCOL) CALL MOVABS (XL(1),YL(1)) CALL LNABS (XL(2),YL(2)) CALL LNABS (XL(3),YL(3)) CALL LNABS (XL(1),YL(1)) RETURN END !> spline2curvi parameter menu subroutine change_spline2curvi_param(jacancelled) use M_GRIDSETTINGS use unstruc_display use unstruc_version_module, only : unstruc_company, unstruc_program use m_spline2curvi implicit none integer, intent(out) :: jacancelled !< Whether or not (1/0) user has pressed 'Esc' in parameter screen. integer :: i integer :: ifexit integer :: ifinit integer :: ih integer :: il integer :: imp integer :: inp integer :: ir integer :: iw integer :: ixp integer :: iyp integer :: key integer :: nbut integer :: nlevel integer :: numfldactual integer :: numparactual integer :: idum=0 integer, parameter :: NUMPAR = 14, NUMFLD = 2*NUMPAR INTEGER IX(NUMFLD),IY(NUMFLD),IS(NUMFLD),IT(NUMFLD) CHARACTER WRDKEY*40, OPTION(NUMPAR)*40, HELPM(NUMPAR)*60 COMMON /HELPNOW/ WRDKEY,NLEVEL integer, external :: infoinput external :: highlight_form_line jacancelled = 0 NLEVEL = 4 OPTION(1) = 'MAXIMUM NUMBER OF GRIDCELLS ALONG SPLINE' ; IT(1*2) = 2 OPTION(2) = 'MAXIMUM NUMBER OF GRIDCELLS PERP. SPLINE' ; IT(2*2) = 2 OPTION(3) = 'ASPECT RATIO OF FIRST GRID LAYER ' ; IT(3*2) = 6 OPTION(4) = 'GRID LAYER HEIGHT GROWTH FACTOR ' ; IT(4*2) = 6 OPTION(5) = 'MAXIMUM GRID LENGTH ALONG CENTER SPLINE ' ; IT(5*2) = 6 OPTION(6) = 'CURVATURE-ADAPTED GRID SPACING (0,1)' ; IT(6*2) = 2 OPTION(7) = 'GROW GRID OUTSIDE FIRST PART (0,1)' ; IT(7*2) = 2 OPTION(8) = 'MAX. NUM. OF GRIDCELL PERP. IN UNI. PART' ; IT(8*2) = 2 OPTION(9) = ' ' ; IT(9*2) = 2 OPTION(10) = 'GRIDPTS. ON TOP OF EACH OTHER TOLERANCE ' ; IT(10*2) = 6 OPTION(11) = 'MINIMUM ABS. SINE OF CROSSING ANGLES ' ; IT(11*2) = 6 OPTION(12) = 'PREVENT COLL.S W/OTHER GRIDPARTS (0,1) ' ; IT(12*2) = 2 OPTION(13) = ' ' ; IT(13*2) = 2 OPTION(14) = 'UNIFORM GRIDSIZE (NETBND2GRID ONLY) (m) ' ; IT(14*2) = 6 ! 123456789012345678901234567890123456789012345678901234567890 ! 1 2 3 4 5 6 HELPM (1) = 'INTEGER VALUE < ' HELPM (2) = 'INTEGER VALUE < ' HELPM (3) = 'REAL VALUE < ' HELPM (4) = 'REAL VALUE < ' HELPM (5) = 'REAL VALUE < ' HELPM (6) = 'INTEGER VALUE < ' HELPM (7) = 'INTEGER VALUE < ' HELPM (8) = 'INTEGER VALUE < ' HELPM (9) = ' ' HELPM (10) = 'REAL VALUE < ' HELPM (11) = 'REAL VALUE < ' HELPM (12) = 'INTEGER VALUE < ' HELPM (13) = ' ' HELPM (14) = 'REAL VALUE < ' CALL SAVEKEYS() NUMPARACTUAL = NUMPAR NUMFLDACTUAL = 2*NUMPARACTUAL IR = 0 DO I = 1,NUMPARACTUAL IL = IR + 1 ; IR = IL + 1 IS(IL) = 82 ; IS(IR) = 10 IX(IL) = 10 ; IX(IR) = 100 IY(IL) = 2*I ; IY(IR) = 2*I IT(IL) = 1001 ! ir staat hierboven ENDDO ! Initialise CALL IWinWordWrap('OFF') CALL ITEXTCOLOURN(HLPFOR, HLPBCK) CALL INHIGHLIGHT('WHITE','RED') IW = NPOS(3) IXP = NPOS(1) + (IWS-IW)/2 IYP = NPOS(2) IH = IHS - 9 ! Header of filewindow CALL IWinAction('FPC') CALL IWinOpen(IXP,IYP,IW,1) CALL ITEXTCOLOURN(LBLFOR,LBLBCK) CALL IWinOutCentre(1,trim(unstruc_company)//'-'//trim(unstruc_program)// ' PARAMETER FORM') CALL ITEXTCOLOURN(HLPFOR,HLPBCK) ! Explain keyfunctions in bottom window CALL IWinAction('FPC') CALL IWinOpen(IXP,IHS-1,IW,2) CALL IWinOutStringXY(1,1,'move = , Tab, confirm = Enter, no change = Esc, help = F3') CALL IWinOutStringXY(1,2,'right mouse = Enter, click outside window = Esc') ! Filewindow is middelste window CALL IWinAction('FPC') CALL IWinOpen(IXP,IYP+3,IW,IH) CALL InControlKey(29,129) CALL InControlKey(30,128) ! Define a new form by supplying arrays containing Field positions, sizes and types CALL IFORMDEFINE('W',NUMFLDACTUAL,IX,IY,IS,IT) ! Define a help field and define help strings for 2 of the 4 input fields CALL IFORMHELP(13,IH,60) IR = 0 DO I = 1,NUMPARACTUAL IL = IR + 1 IR = IL + 1 CALL IFORMPUTSTRING (IL,OPTION(I)) CALL IFORMPUTHELP (IR,HELPM(I)) CALL IFORMATTRIBUTEN(IR,0,0,7) ENDDO CALL IFORMPUTINTEGER (2*1, MFAC ) CALL IFORMPUTINTEGER (2*2, NFAC ) CALL IFORMPUTDOUBLE (2*3, daspect, '(F7.3)') ! CALL IFORMPUTDOUBLE (2*4, maxaspect, '(F7.3)') CALL IFORMPUTDOUBLE (2*4, dgrow, '(F7.3)') CALL IFORMPUTDOUBLE (2*5, dwidth, '(F11.3)') CALL IFORMPUTINTEGER (2*6, jacurv ) CALL IFORMPUTINTEGER (2*7, jaoutside ) CALL IFORMPUTINTEGER (2*8, NFACUNIMAX ) ! CALL IFORMPUTINTEGER (2*9, idum ) CALL IFORMPUTDOUBLE (2*10, dtolLR, '(F11.5)') CALL IFORMPUTDOUBLE (2*11, dtolcos, '(F11.3)') CALL IFORMPUTINTEGER (2*12, jaCheckFrontCollision) CALL IFORMPUTDOUBLE (2*14, dunigridsize, '(F11.3)') NFAC = max(NFAC,NFACUNIMAX) ! Display the form with numeric fields left justified and set the initial field to number 2 CALL IOUTJUSTIFYNUM('L') IFEXIT = 2 call IFormAttribute(IFEXIT-1, 'BU', ' ', ' ') CALL IFORMSHOW() 30 CONTINUE IFINIT = IFEXIT CALL IFormEditUser(IFINIT, IFEXIT, highlight_form_line) ! check for Help, Confirm, Quit KEY = INFOINPUT(55) IF (KEY .EQ. -2) THEN NBUT = INFOINPUT(61) IF (NBUT .GE. 1) THEN IMP = INFOINPUT(62) + 1 INP = INFOINPUT(63) + 1 IF (IMP .GE. IXP .AND. IMP .LT. IXP+IW .AND. & INP .GE. IYP+3 .AND. INP .LT. IYP+IH+3+2 ) THEN IF (NBUT .EQ. 1) THEN KEY = 21 ELSE KEY = 22 ENDIF ELSE KEY = 23 ENDIF ENDIF ELSE IF (KEY .EQ. -1) THEN KEY = INFOINPUT(57) ENDIF IF (KEY .EQ. 26) THEN WRDKEY = OPTION(IFEXIT/2) CALL HELP(WRDKEY,NLEVEL) ELSE IF (KEY .EQ. 22 .OR. KEY .EQ. 23) THEN IF (KEY .EQ. 22) THEN CALL IFORMGETINTEGER (2*1 , MFAC ) CALL IFORMGETINTEGER (2*2 , NFAC ) CALL IFORMGETDOUBLE (2*3 , daspect ) ! CALL IFORMGETDOUBLE (2*4 , maxaspect) CALL IFORMGETDOUBLE (2*4 , dgrow ) CALL IFORMGETDOUBLE (2*5 , dwidth ) CALL IFORMGETINTEGER (2*6 , jacurv ) CALL IFORMGETINTEGER (2*7 , jaoutside) CALL IFORMGETINTEGER (2*8 , NFACUNIMAX) ! CALL IFORMGETINTEGER (2*9 , idum) CALL IFORMGETDOUBLE (2*10, dtolLR) CALL IFORMGETDOUBLE (2*11, dtolcos) CALL IFORMGETINTEGER (2*12, jaCheckFrontCollision) CALL IFORMGETDOUBLE (2*14, dunigridsize) ELSEIF (KEY .EQ. 23) THEN jacancelled = 1 ENDIF CALL IWinClose(1) CALL IWinClose(1) CALL IWinClose(1) CALL RESTOREKEYS() RETURN ELSE IF (KEY .EQ. 21) THEN IF (IFEXIT .EQ. 1 .OR. IFEXIT .EQ. 3) THEN WRDKEY = HELPM(IFEXIT) CALL HELP(WRDKEY,NLEVEL) ENDIF ENDIF GOTO 30 end subroutine change_spline2curvi_param !> KML export parameter menu subroutine change_kml_parameters(jacancelled) use m_kml_parameters use unstruc_display use unstruc_version_module, only : unstruc_company, unstruc_program implicit none integer, intent(out) :: jacancelled !< Whether or not (1/0) user has pressed 'Esc' in parameter screen. integer :: i integer :: ifexit integer :: ifinit integer :: ih integer :: il integer :: imp integer :: inp integer :: ir integer :: iw integer :: ixp integer :: iyp integer :: key integer :: nbut integer :: nlevel integer :: numfldactual integer :: numparactual integer :: idum=0 integer, parameter :: NUMPAR = 9, NUMFLD = 2*NUMPAR INTEGER IX(NUMFLD),IY(NUMFLD),IS(NUMFLD),IT(NUMFLD) CHARACTER WRDKEY*40, OPTION(NUMPAR)*40, HELPM(NUMPAR)*60 COMMON /HELPNOW/ WRDKEY,NLEVEL integer, external :: infoinput external :: highlight_form_line jacancelled = 0 NLEVEL = 4 OPTION(1) = 'Export flat view of unstruct. grid (0/1)' ; IT(1*2) = 2 OPTION(2) = 'Export depth view of grid cells (0/1)' ; IT(2*2) = 2 OPTION(3) = '* flat or 3D view of depths (0/1)' ; IT(3*2) = 2 OPTION(4) = '* Altitude exaggeration factor ' ; IT(4*2) = 6 OPTION(5) = '* Offset altitude with deepest pt. (0/1)' ; IT(5*2) = 2 OPTION(6) = '* Additional offset (+ = upward) ' ; IT(6*2) = 6 OPTION(7) = '* Dummy altitude for missing values ' ; IT(7*2) = 6 OPTION(8) = '* Minimal value for color scale ' ; IT(8*2) = 6 OPTION(9) = '* Maximal value for color scale ' ; IT(9*2) = 6 ! 123456789012345678901234567890123456789012345678901234567890 ! 1 2 3 4 5 6 HELPM (1) = 'Integer value 0/1, flat grid view is faster. ' HELPM (2) = 'Integer value 0/1, depth view is nicer. ' HELPM (3) = 'Integer value 0/1, 3D view is nicer, 2D aligns better. ' HELPM (4) = 'Altitude differences are multiplied by this factor. ' HELPM (5) = 'When set to 0, grid may disappear "under water". ' HELPM (6) = 'Additional offset, to lift/lower the 3D grid. ' HELPM (7) = 'Missing zk values will be replaced by this dummy in the kml.' HELPM (8) = 'Color scaling starts at this value, lower zks are clipped. ' HELPM (9) = 'Color scaling stops at this value, higher zks are clipped. ' CALL SAVEKEYS() NUMPARACTUAL = NUMPAR NUMFLDACTUAL = 2*NUMPARACTUAL IR = 0 DO I = 1,NUMPARACTUAL IL = IR + 1 ; IR = IL + 1 IS(IL) = 82 ; IS(IR) = 10 IX(IL) = 10 ; IX(IR) = 100 IY(IL) = 2*I ; IY(IR) = 2*I IT(IL) = 1001 ! ir staat hierboven ENDDO ! Initialise CALL IWinWordWrap('OFF') CALL ITEXTCOLOURN(HLPFOR, HLPBCK) CALL INHIGHLIGHT('WHITE','RED') IW = NPOS(3) IXP = NPOS(1) + (IWS-IW)/2 IYP = NPOS(2) IH = IHS - 9 ! Header of filewindow CALL IWinAction('FPC') CALL IWinOpen(IXP,IYP,IW,1) CALL ITEXTCOLOURN(LBLFOR,LBLBCK) CALL IWinOutCentre(1,trim(unstruc_company)//'-'//trim(unstruc_program)// ' PARAMETER FORM') CALL ITEXTCOLOURN(HLPFOR,HLPBCK) ! Explain keyfunctions in bottom window CALL IWinAction('FPC') CALL IWinOpen(IXP,IHS-1,IW,2) CALL IWinOutStringXY(1,1,'move = , Tab, confirm = Enter, no change = Esc, help = F3') CALL IWinOutStringXY(1,2,'right mouse = Enter, click outside window = Esc') ! Filewindow is middelste window CALL IWinAction('FPC') CALL IWinOpen(IXP,IYP+3,IW,IH) CALL InControlKey(29,129) CALL InControlKey(30,128) ! Define a new form by supplying arrays containing Field positions, sizes and types CALL IFORMDEFINE('W',NUMFLDACTUAL,IX,IY,IS,IT) ! Define a help field and define help strings for 2 of the 4 input fields CALL IFORMHELP(13,IH,60) IR = 0 DO I = 1,NUMPARACTUAL IL = IR + 1 IR = IL + 1 CALL IFORMPUTSTRING (IL,OPTION(I)) CALL IFORMPUTHELP (IR,HELPM(I)) CALL IFORMATTRIBUTEN(IR,0,0,7) ENDDO CALL IFORMPUTINTEGER (2*1, kml_janet ) CALL IFORMPUTINTEGER (2*2, kml_jadepth ) CALL IFORMPUTINTEGER (2*3, kml_jadepth3d ) CALL IFORMPUTDOUBLE (2*4, kml_altfact, '(F4.1)') CALL IFORMPUTINTEGER (2*5, kml_jaoffsetzk) CALL IFORMPUTDOUBLE (2*6, kml_useroffset, '(F6.1)') CALL IFORMPUTDOUBLE (2*7, kml_dmiss, '(F6.1)') CALL IFORMPUTDOUBLE (2*8, kml_zmin, '(F6.1)') CALL IFORMPUTDOUBLE (2*9, kml_zmax, '(F6.1)') ! Display the form with numeric fields left justified and set the initial field to number 2 CALL IOUTJUSTIFYNUM('L') IFEXIT = 2 call IFormAttribute(IFEXIT-1, 'BU', ' ', ' ') CALL IFORMSHOW() 30 CONTINUE IFINIT = IFEXIT CALL IFormEditUser(IFINIT, IFEXIT, highlight_form_line) ! check for Help, Confirm, Quit KEY = INFOINPUT(55) IF (KEY .EQ. -2) THEN NBUT = INFOINPUT(61) IF (NBUT .GE. 1) THEN IMP = INFOINPUT(62) + 1 INP = INFOINPUT(63) + 1 IF (IMP .GE. IXP .AND. IMP .LT. IXP+IW .AND. & INP .GE. IYP+3 .AND. INP .LT. IYP+IH+3+2 ) THEN IF (NBUT .EQ. 1) THEN KEY = 21 ELSE KEY = 22 ENDIF ELSE KEY = 23 ENDIF ENDIF ELSE IF (KEY .EQ. -1) THEN KEY = INFOINPUT(57) ENDIF IF (KEY .EQ. 26) THEN WRDKEY = OPTION(IFEXIT/2) CALL HELP(WRDKEY,NLEVEL) ELSE IF (KEY .EQ. 22 .OR. KEY .EQ. 23) THEN IF (KEY .EQ. 22) THEN CALL IFORMGETINTEGER (2*1 , kml_janet) CALL IFORMGETINTEGER (2*2 , kml_jadepth) CALL IFORMGETINTEGER (2*3 , kml_jadepth3d) CALL IFORMGETDOUBLE (2*4 , kml_altfact) CALL IFORMGETINTEGER (2*5 , kml_jaoffsetzk) CALL IFORMGETDOUBLE (2*6 , kml_useroffset) CALL IFORMGETDOUBLE (2*7 , kml_dmiss) CALL IFORMGETDOUBLE (2*8 , kml_zmin) CALL IFORMGETDOUBLE (2*9 , kml_zmax) ELSEIF (KEY .EQ. 23) THEN jacancelled = 1 ENDIF CALL IWinClose(1) CALL IWinClose(1) CALL IWinClose(1) CALL RESTOREKEYS() RETURN ELSE IF (KEY .EQ. 21) THEN IF (IFEXIT .EQ. 1 .OR. IFEXIT .EQ. 3) THEN WRDKEY = HELPM(IFEXIT) CALL HELP(WRDKEY,NLEVEL) ENDIF ENDIF GOTO 30 end subroutine change_kml_parameters SUBROUTINE PLUSABSD(XK,YK,ZK,NUMK,KEY,EA) use m_polygon USE M_MISSING implicit none INTEGER, PARAMETER :: MAXOP = 50 CHARACTER*40 :: OPTION(MAXOP),EXP(MAXOP) INTEGER :: NUMK, KEY DOUBLE PRECISION :: XK(NUMK), YK(NUMK), ZK(NUMK), EA(NUMK) DOUBLE PRECISION :: XI, YI, ZI, DA, AF, RD INTEGER :: ichange, inhul, ja, k, maxexp, maxopt, nwhat, kk DOUBLE PRECISION, SAVE :: A = 1D0 JA = 0 EXP(1) = 'MENU TIG ' EXP(2) = 'HOW TO REPLACE THE VALUES ' OPTION(1) = 'FIELD = UNIFORM VALUE, only missings ' OPTION(2) = 'FIELD = UNIFORM VALUE, all points ' OPTION(3) = 'FIELD = MAX(FIELD,UNIFORM VALUE) ' OPTION(4) = 'FIELD = MIN(FIELD,UNIFORM VALUE) ' OPTION(5) = 'FIELD = FIELD + UNIFORM VALUE ' OPTION(6) = 'FIELD = FIELD * UNIFORM VALUE ' OPTION(7) = 'FIELD = MISSING VALUE -999. ' OPTION(8) = 'SPECIFY UNIFORM VALUE ' MAXOPT = 8 ICHANGE = 1 10 CONTINUE NWHAT = ICHANGE CALL SHOWREAL('UNIFORM VALUE = ',A) CALL MENUV3(NWHAT,OPTION,MAXOPT,EXP,MAXEXP) CALL IWINCLOSE(1) IF (NWHAT .EQ. 0) THEN KEY = 0 RETURN ELSE IF (NWHAT .LE. 6) THEN ICHANGE = NWHAT IF (A .EQ. dmiss) THEN CALL GETREAL('FIRST SPECIFY UNIFORM VALUE = ',A) IF (A .NE. dmiss) JA = 1 GOTO 10 ELSE JA = 1 ENDIF ELSE IF (NWHAT == 7) THEN ICHANGE = NWHAT ELSE IF (NWHAT == 8) THEN CALL GETREAL('SPECIFY UNIFORM VALUE = ',A) IF (A .NE. dmiss) JA = 1 GOTO 10 ENDIF ENDIF IF (NPL .LE. 2) THEN CALL CONFRM('NO POLYGON, SO INCLUDE all FIELD POINTS ? ',JA) IF (JA .EQ. 0) THEN KEY = 0 RETURN ENDIF ENDIF ! CALL SAVE() CALL READYY('CHANGE FIELD VALUES', 0d0) DO 20 K = 1,NUMK if (mod (k,1000) == 0) then AF = dble(K) / dble(NUMK) CALL READYY('CHANGE FIELD VALUES', AF) endif XI = XK(K) YI = YK(K) ZI = ZK(K) RD = EA(K) JA = 0 IF (NPL .GE. 3) THEN CALL DPINPOK( XI, YI, ZI, NPL, XPL, YPL, INHUL) IF (INHUL .EQ. 1) JA = 1 ELSE JA = 1 ENDIF IF (JA .EQ. 1) THEN DA = A IF (ICHANGE .EQ. 1) THEN IF (RD == dmiss) THEN EA(K) = DA ENDIF ELSE IF (ICHANGE .EQ. 2) THEN EA(K) = DA ELSE IF (ICHANGE .EQ. 3) THEN IF (RD /= dmiss) EA(K) = MAX(EA(K),DA) ELSE IF (ICHANGE .EQ. 4) THEN IF (RD /= dmiss) EA(K) = MIN(EA(K),DA) ELSE IF (ICHANGE .EQ. 5) THEN IF (RD /= dmiss) EA(K) = EA(K) + DA ELSE IF (ICHANGE .EQ. 6) THEN IF (RD /= dmiss) EA(K) = EA(K) * DA ELSE IF (ICHANGE .EQ. 7) THEN EA(K) = dmiss ENDIF ENDIF 20 CONTINUE CALL READYY('CHANGE FIELD VALUES', -1d0) KEY = 3 RETURN END SUBROUTINE PLUSABSD SUBROUTINE PLUSABSI(XK,YK,ZK,KN,NUMK,NUML,KEY,kndefault) use M_polygon USE M_MISSING use network_data, only: kn3typ implicit none integer, parameter :: MAXOP = 50 integer :: NUMK, NUML, KEY DOUBLE PRECISION XK(NUMK), YK(NUMK), ZK(NUMK), XI, YI, ZI INTEGER KN(3,NUML) integer, intent(inout) :: kndefault !< Default uniform value (e.g. kn3typ), will be changed too at call site when user changes it in the dialog. CHARACTER*40 OPTION(MAXOP),EXP(MAXOP) double precision :: af integer :: ia integer :: ichange integer :: inhul integer :: ja integer :: k1 integer :: k2 integer :: l integer :: maxexp integer :: maxopt integer :: nwhat double precision :: rd double precision, save :: A integer, save :: INI = 0 A = kndefault JA = 0 EXP(1) = 'MENU TIG ' EXP(2) = 'HOW TO REPLACE THE VALUES ' OPTION(1) = 'FIELD = UNIFORM VALUE, only missings ' OPTION(2) = 'FIELD = UNIFORM VALUE, all points ' OPTION(3) = 'FIELD = MAX(FIELD,UNIFORM VALUE) ' OPTION(4) = 'FIELD = MIN(FIELD,UNIFORM VALUE) ' OPTION(5) = 'FIELD = FIELD + UNIFORM VALUE ' OPTION(6) = 'FIELD = FIELD * UNIFORM VALUE ' OPTION(7) = 'FIELD = MISSING VALUE -999. ' OPTION(8) = 'SPECIFY UNIFORM VALUE ' MAXOPT = 8 ICHANGE = 1 10 CONTINUE NWHAT = ICHANGE CALL SHOWREAL('UNIFORM VALUE = ',A) CALL MENUV3(NWHAT,OPTION,MAXOPT,EXP,MAXEXP) CALL IWINCLOSE(1) IF (NWHAT .EQ. 0) THEN KEY = 0 RETURN ELSE IF (NWHAT .LE. 6) THEN ICHANGE = NWHAT IF (A .EQ. dmiss) THEN CALL GETREAL('FIRST SPECIFY UNIFORM VALUE = ',A) IF (A .NE. dmiss) JA = 1 GOTO 10 ELSE JA = 1 ENDIF ELSE IF (NWHAT == 7) THEN ICHANGE = NWHAT ELSE IF (NWHAT == 8) THEN CALL GETREAL('SPECIFY UNIFORM VALUE = ',A) IF (A .NE. dmiss) then JA = 1 kndefault = int(A) end if GOTO 10 ENDIF ENDIF IF (NPL .LE. 2) THEN CALL CONFRM('NO POLYGON, SO INCLUDE all FIELD POINTS ? ',JA) IF (JA .EQ. 0) THEN KEY = 0 RETURN ENDIF ENDIF CALL SAVE() CALL READYY('CHANGE FIELD VALUES', 0d0) KMOD = MAX(1,NUML/100) DO 20 L = 1,NUML IF (MOD(L,KMOD) == 0) THEN AF = dble(L) / dble(NUML) CALL READYY('CHANGE FIELD VALUES', AF) ENDIF K1 = KN(1,L) K2 = KN(2,L) IF (K1 .EQ. 0 .OR. K2 .EQ. 0) GOTO 20 XI = (XK(K1) + XK(K2))/2 YI = (YK(K1) + YK(K2))/2 ZI = (ZK(K1) + ZK(K2))/2 RD = kn(3,L) JA = 0 IF (NPL .GE. 3) THEN CALL DPINPOK( XI, YI, ZI, NPL, XPL, YPL, INHUL) IF (INHUL .EQ. 1) JA = 1 ELSE JA = 1 ENDIF IA = A IF (JA .EQ. 1) THEN IF (ICHANGE .EQ. 1) THEN IF (RD == dmiss) THEN kn(3,L) = IA ENDIF ELSE IF (ICHANGE .EQ. 2) THEN kn(3,L) = IA ELSE IF (ICHANGE .EQ. 3) THEN IF (RD == dmiss) kn(3,L) = MAX(kn(3,L),IA) ELSE IF (ICHANGE .EQ. 4) THEN IF (RD == dmiss) kn(3,L) = MIN(kn(3,L),IA) ELSE IF (ICHANGE .EQ. 5) THEN IF (RD == dmiss) kn(3,L) = kn(3,L) + IA ELSE IF (ICHANGE .EQ. 6) THEN IF (RD == dmiss) kn(3,L) = kn(3,L) * IA ELSE IF (ICHANGE .EQ. 7) THEN kn(3,L) = INT(dmiss) ENDIF ENDIF 20 CONTINUE CALL READYY('CHANGE FIELD VALUES', -1d0) KEY = 3 RETURN END SUBROUTINE PLUSABSI SUBROUTINE TEKLAN(NCOL) USE M_LANDBOUNDARY use m_wearelt USE unstruc_colors implicit none integer :: NCOL integer :: NDRAW COMMON /DRAWTHIS/ NDRAW(40) integer :: j1 integer :: k integer :: ncl integer :: ncold double precision :: rh logical :: inview IF (NDRAW(3) .EQ. 0) return IF (NDRAW(3) .EQ. 4 .or. NDRAW(3) .EQ. 8) then call linewidth(3) endif CALL DISP3C(XLAN, YLAN, ZLAN, NCLAN, MXLAN, 0d0, NCOL) NCOLD = 0 DO K = 1,MXLAN NCL = NCLAN(K) IF (NCL .LT. 0) THEN IF (NCOLD .EQ. 0) THEN NCOLD = ABS(NCL) J1 = K ELSE IF (ABS(NCL) .NE. NCOLD) THEN CALL PFILLER(XLAN(J1),YLAN(J1),K-J1,NCOLD,NCOLD) NCOLD = 0 ENDIF ELSE IF (NCOLD .NE. 0) THEN CALL PFILLER(XLAN(J1),YLAN(J1),K-J1,NCOLD,NCOLD) NCOLD = 0 ENDIF ENDDO if (ndraw(3) == 2 .or. ndraw(3) == 6) then CALL SETCOL(NCOLDG) rh = 0.2*rcir DO K = 1,MXLAN if ( inview(xlan(k), ylan(k) ) ) then !CALL PTABS( XLAN(K), YLAN(K) ) call fbox(xlan(k)-rh, ylan(k)-rh, xlan(k)+rh, ylan(k)+rh) endif enddo endif if (ndraw(3) == 3 .or. ndraw(3) == 7) then CALL SETCOL(NCOLDG) DO K = 1,MXLAN if ( inview ( xlan(k), ylan(k) ) ) then RH = 0 CALL DHITEXT(K,XLAN(K),YLAN(K),RH) endif enddo endif call linewidth(1) RETURN END SUBROUTINE TEKLAN SUBROUTINE TEKBOTTOM(MET) use m_wearelt implicit none double precision :: dz integer :: i integer :: jav integer :: jview integer :: k integer :: k1 integer :: k2 integer :: nz double precision :: uf double precision :: vf double precision :: wd double precision :: wf double precision :: xyz double precision :: ybot double precision :: ytop integer :: MET COMMON /FLOWSTUFF/ UF, VF, WF, YBOT, YTOP COMMON /HOWTOVIEW/ JVIEW, JAV, XYZ ! 1,2,3 OF 4 DOUBLE PRECISION XD,YD,ZD,XX1,XX2,ZZ1,ZZ2 CALL SETCOL(160) IF (MET .EQ. 1) RETURN WD = 1000 XX2 = WD/2 XX1 = -XX2 ZZ2 = WD/2 ZZ1 = -ZZ2 DZ = 0 NZ = 1 IF (JVIEW .GE. 3) THEN NZ = 11 DZ = WD / (NZ-1) ENDIF IF (MET .EQ. 2) THEN K1 = 1 K2 = 2 ELSE IF (MET .EQ. 3) THEN K1 = 2 K2 = 2 ELSE IF (MET .EQ. 4) THEN K1 = 1 K2 = 1 ENDIF YD = YTOP CALL SETCOL(128) ! (112) DO K = K1,K2 IF (K .EQ. 2) THEN YD = YBOT CALL SETCOL(89) ! 128) ENDIF XD = XX1 ZD = ZZ1 DO I = 1,NZ CALL DMOVABS( XX1, YD, ZD) CALL DLNABS ( XX2, YD, ZD) CALL DMOVABS( XD, YD, ZZ1) CALL DLNABS ( XD, YD, ZZ2) ZD = ZD + DZ XD = XD + DZ ENDDO ENDDO RETURN END SUBROUTINE TEKBOTTOM !> select link for directional refinement in GUI subroutine getlink_GUI(xp, yp, L) implicit none double precision, intent(out) :: xp, yp !< coordinates of clicked point integer, intent(out) :: L !< clicked link number double precision :: zp integer :: num, nwhat, nput, numb, key L = 0 call ktext(' Refine net ',1,3,15) num = 0 nwhat = 0 nput = 55 numb = 10 key = 0 do CALL DRAWNU(KEY) call putget_un(num,nwhat,nput,numb,xp,yp,key) if ( key.eq.23 ) then ! escape exit else if ( key.eq.21) then ! left mouse button call islink(L,xp,yp,zp) if ( L.gt.0 ) then ! link found call teklink(L,31) exit end if ! the following is copied from editnetw (zoom, panning) else if (key .eq. 43 .or. key .eq. 140) then call kplotplusmin(1) key = 3 else if (key .eq. 45 .or. key .eq. 141) then call kplotplusmin(-1) key = 3 else if (key .eq. 133) then ! page down call nplotplusmin(1) key = 3 else if (key .eq. 143) then ! delete call nplotplusmin(-1) key = 3 end if end do if ( L.lt.1 ) then call qnerror('no link clicked: exitting', ' ', ' ') end if return end subroutine !> refinecellsandfaces2 parameter menu subroutine change_samples_refine_param(jacancelled) use unstruc_display use unstruc_version_module, only : unstruc_company, unstruc_program use m_samples_refine implicit none integer, intent(out) :: jacancelled !< Whether or not (1/0) user has pressed 'Esc' in parameter screen. integer :: i integer :: ifexit integer :: ifinit integer :: ih integer :: il integer :: imp integer :: inp integer :: ir integer :: iw integer :: ixp integer :: iyp integer :: key integer :: nbut integer :: nlevel integer :: numfldactual integer :: numparactual integer, parameter :: NUMPAR = 13, NUMFLD = 2*NUMPAR INTEGER IX(NUMFLD),IY(NUMFLD),IS(NUMFLD),IT(NUMFLD) CHARACTER WRDKEY*40, OPTION(NUMPAR)*60, HELPM(NUMPAR)*60 character(len=60) :: text COMMON /HELPNOW/ WRDKEY,NLEVEL integer, external :: infoinput external :: highlight_form_line jacancelled = 0 NLEVEL = 4 text = '' WRITE(text, "('TYPE: RIDGES (', I1, '), WAVE COURANT NUMBER (', I1, ')')") ITYPE_RIDGE, ITYPE_WAVECOURANT OPTION(1) = text ; IT(1*2) = 2 OPTION(2) = '' ; IT(2*2) = 0 OPTION(3) = 'RIDGE DETECTION' ; IT(3*2) = 0 OPTION(4) = 'CELL SIZE * TYPICAL OBSTACLE HEIGHT [m2]' ; IT(4*2) = 6 OPTION(5) = 'MINIMUM TYPICAL OBSTACLE HEIGHT [m] ' ; IT(5*2) = 6 OPTION(6) = 'MINIMUM CELL EDGE LENGTH [m] ' ; IT(6*2) = 6 OPTION(7) = 'NUMBER OF SAMPLE SMOOTHING ITERATIONS [-] ' ; IT(7*2) = 2 OPTION(8) = ' ' ; IT(8*2) = 0 OPTION(9) = 'WAVE COURANT NUMBER ' ; IT(9*2) = 0 OPTION(10) = 'MAXIMUM TIME-STEP [s] ' ; IT(10*2) = 6 OPTION(11) = 'MINIMUM CELL EDGE LENGTH [m] ' ; IT(11*2) = 6 OPTION(12) = 'DIRECTIONAL REFINEMENT (1) OR NOT (0) ' ; IT(12*2) = 2 OPTION(13) = 'USE SAMPLES OUTSIDE CELL (1) OR NOT (0) ' ; IT(13*2) = 2 HELPM (1) = 'INTEGER VALUE < ' HELPM (2) = ' ' HELPM (3) = ' ' HELPM (4) = 'REAL VALUE < ' HELPM (5) = 'REAL VALUE < ' HELPM (6) = 'REAL VALUE < ' HELPM (7) = 'INTEGER VALUE < ' HELPM (8) = ' ' HELPM (9) = ' ' HELPM (10) = 'REAL VALUE < ' HELPM (11) = 'REAL VALUE < ' HELPM (12) = 'INTEGER VALUE < ' HELPM (13) = 'INTEGER VALUE < ' CALL SAVEKEYS() NUMPARACTUAL = NUMPAR NUMFLDACTUAL = 2*NUMPARACTUAL IR = 0 DO I = 1,NUMPARACTUAL IL = IR + 1 ; IR = IL + 1 IS(IL) = 82 ; IS(IR) = 10 IX(IL) = 10 ; IX(IR) = 100 IY(IL) = 2*I ; IY(IR) = 2*I IT(IL) = 1001 ! ir staat hierboven if ( IT(IR).eq.0 ) then IS(IR) = 0 end if ENDDO ! Initialise CALL IWinWordWrap('OFF') CALL ITEXTCOLOURN(HLPFOR, HLPBCK) CALL INHIGHLIGHT('WHITE','RED') IW = NPOS(3) IXP = NPOS(1) + (IWS-IW)/2 IYP = NPOS(2) IH = IHS - 9 ! Header of filewindow CALL IWinAction('FPC') CALL IWinOpen(IXP,IYP,IW,1) CALL ITEXTCOLOURN(LBLFOR,LBLBCK) CALL IWinOutCentre(1,trim(unstruc_company)//'-'//trim(unstruc_program)// ' PARAMETER FORM') CALL ITEXTCOLOURN(HLPFOR,HLPBCK) ! Explain keyfunctions in bottom window CALL IWinAction('FPC') CALL IWinOpen(IXP,IHS-1,IW,2) CALL IWinOutStringXY(1,1,'move = , Tab, confirm = Enter, no change = Esc, help = F3') CALL IWinOutStringXY(1,2,'right mouse = Enter, click outside window = Esc') ! Filewindow is middelste window CALL IWinAction('FPC') CALL IWinOpen(IXP,IYP+3,IW,IH) CALL InControlKey(29,129) CALL InControlKey(30,128) ! Define a new form by supplying arrays containing Field positions, sizes and types CALL IFORMDEFINE('W',NUMFLDACTUAL,IX,IY,IS,IT) ! Define a help field and define help strings for 2 of the 4 input fields CALL IFORMHELP(13,IH,60) IR = 0 DO I = 1,NUMPARACTUAL IL = IR + 1 IR = IL + 1 CALL IFORMPUTSTRING (IL,OPTION(I)) CALL IFORMPUTHELP (IR,HELPM(I)) CALL IFORMATTRIBUTEN(IR,0,0,7) ENDDO CALL IFORMPUTINTEGER(2*1, irefinetype, '(F12.3)') CALL IFORMPUTDOUBLE(2*4, threshold, '(F12.3)') CALL IFORMPUTDOUBLE(2*5, thresholdmin, '(F12.3)') CALL IFORMPUTDOUBLE(2*6, hmin, '(F12.3)') CALL IFORMPUTINTEGER(2*7, Nsamplesmooth) CALL IFORMPUTDOUBLE(2*10, Dt_maxcour, '(F12.3)') CALL IFORMPUTDOUBLE(2*11, hmin, '(F12.3)') CALL IFORMPUTINTEGER(2*12, jadirectional) CALL IFORMPUTINTEGER(2*13, jaoutsidecell) ! Display the form with numeric fields left justified and set the initial field to number 2 CALL IOUTJUSTIFYNUM('L') IFEXIT = 2 call IFormAttribute(IFEXIT-1, 'BU', ' ', ' ') CALL IFORMSHOW() 30 CONTINUE IFINIT = IFEXIT CALL IFormEditUser(IFINIT, IFEXIT, highlight_form_line) ! check for Help, Confirm, Quit KEY = INFOINPUT(55) IF (KEY .EQ. -2) THEN NBUT = INFOINPUT(61) IF (NBUT .GE. 1) THEN IMP = INFOINPUT(62) + 1 INP = INFOINPUT(63) + 1 IF (IMP .GE. IXP .AND. IMP .LT. IXP+IW .AND. & INP .GE. IYP+3 .AND. INP .LT. IYP+IH+3+2 ) THEN IF (NBUT .EQ. 1) THEN KEY = 21 ELSE KEY = 22 ENDIF ELSE KEY = 23 ENDIF ENDIF ELSE IF (KEY .EQ. -1) THEN KEY = INFOINPUT(57) ENDIF IF (KEY .EQ. 26) THEN WRDKEY = OPTION(IFEXIT/2) CALL HELP(WRDKEY,NLEVEL) ELSE IF (KEY .EQ. 22 .OR. KEY .EQ. 23) THEN IF (KEY .EQ. 22) THEN CALL IFORMGETINTEGER(2*1, irefinetype) CALL IFORMGETDOUBLE(2*4 , threshold) CALL IFORMGETDOUBLE(2*5 , thresholdmin) CALL IFORMGETDOUBLE(2*6 , hmin) CALL IFORMGETINTEGER(2*7 , Nsamplesmooth) CALL IFORMGETDOUBLE(2*10 , Dt_maxcour) CALL IFORMGETDOUBLE(2*11 , hmin) CALL IFORMGETINTEGER(2*12 , jadirectional) CALL IFORMGETINTEGER(2*13 , jaoutsidecell) ELSEIF (KEY .EQ. 23) THEN jacancelled = 1 ENDIF CALL IWinClose(1) CALL IWinClose(1) CALL IWinClose(1) CALL RESTOREKEYS() goto 1234 ELSE IF (KEY .EQ. 21) THEN IF (IFEXIT .EQ. 1 .OR. IFEXIT .EQ. 3) THEN WRDKEY = HELPM(IFEXIT) CALL HELP(WRDKEY,NLEVEL) ENDIF ENDIF GOTO 30 1234 continue if ( Nsamplesmooth.ne.Nsamplesmooth_last ) then iHesstat = iHesstat_DIRTY end if return end subroutine change_samples_refine_param !> plot the ridges subroutine plot_ridges(ierror) use m_samples use m_samples_refine use m_missing implicit none integer, intent(out) :: ierror !< error (1) or not (0) integer :: i, j, ip double precision :: Dx, Dy, dum, Dh, x0, y0, x1, y1, x2, y2 double precision, external :: dbdistance, comp_sampleDh ierror = 1 if ( iHesstat.ne.iHesstat_OK ) goto 1234 ! plot ridge do i=1,MXSAM do j=1,MYSAM ! compute sample mesh width Dh = comp_sampleDh(i,j) ip = i+(j-1)*MXSAM if ( abs(zss(5,i,j)).gt.0.5d0*Dh .or. zss(4,i,j).gt.-1d-8 .or. zss(5,i,j).eq.DMISS ) cycle Dx = zss(3,i,j) Dy = -zss(2,i,j) dum = Dh/sqrt(Dx**2+Dy**2+1d-16) Dx = Dx*dum Dy = Dy*dum call setcol(204) x0 = xs(ip)+zss(2,i,j)*zss(5,i,j) y0 = ys(ip)+zss(3,i,j)*zss(5,i,j) x1 = min(max(x0-Dx,xs(ip)-0.5d0*Dh), xs(ip)+0.5*Dh) y1 = min(max(y0-Dy,ys(ip)-0.5d0*Dh), ys(ip)+0.5*Dh) x2 = min(max(x0+Dx,xs(ip)-0.5d0*Dh), xs(ip)+0.5*Dh) y2 = min(max(y0+Dy,ys(ip)-0.5d0*Dh), ys(ip)+0.5*Dh) call movabs(x1,y1) call lnabs(x2,y2) end do end do ! call qnerror(' ', ' ', ' ') ierror = 0 1234 continue return end subroutine plot_ridges !---------------------------------------------------------------------- ! subroutines from rest.F90 !---------------------------------------------------------------------- SUBROUTINE CHANGECOLOR(XP,YP) use unstruc_colors implicit none double precision :: dv integer :: ic integer :: jaauto integer :: key integer :: n1 integer :: n2 integer :: n3 integer :: ncols integer :: nie integer :: nis integer :: nlevel integer :: numcol integer :: nv double precision :: val double precision :: vmax double precision :: vmin double precision :: xp double precision :: yp CHARACTER TEX*26, WRDKEY*40 COMMON /DEPMAX/ VMAX,VMIN,DV,VAL(256),NCOLS(256),NV,NIS,NIE,JAAUTO COMMON /HELPNOW/ WRDKEY,NLEVEL INTEGER NCL(3) IC = 1 CALL IMOUSECURSORHIDE() CALL DISPUT(35) CALL GETCOLORNUMBER(XP,YP,NUMCOL,N1,N2,N3) NCL(1) = N1 NCL(2) = N2 NCL(3) = N3 CALL SETCOL(NUMCOL) CALL DISVALCOLORS (NUMCOL,NCL(1),NCL(2),NCL(3),IC) 20 CONTINUE CALL INKEYEVENT(KEY) IF (KEY .EQ. 131) THEN IC = IC - 1 IF (IC .EQ. 0) IC = 3 ELSE IF (KEY .EQ. 130) THEN IC = IC + 1 IF (IC .EQ. 4) IC = 1 ELSE IF (KEY .EQ. 128) THEN NCL(IC) = MIN(255,NCL(IC) + 1) CALL IGRPALETTERGB(NUMCOL,NCL(1),NCL(2),NCL(3)) ELSE IF (KEY .EQ. 129) THEN NCL(IC) = MAX(0 ,NCL(IC) - 1) CALL IGRPALETTERGB(NUMCOL,NCL(1),NCL(2),NCL(3)) ELSE IF (KEY .EQ. 171) THEN CALL HELP(WRDKEY,3) ELSE IF (KEY .EQ. 13 .OR. KEY .GE. 251 .AND. KEY .LE. 253) THEN CALL ORGLOCATOR(XP,YP) CALL IMOUSECURSORSHOW() RETURN ELSE IF (KEY .EQ. 27) THEN CALL IGRPALETTERGB(NUMCOL,N1,N2,N3) CALL ORGLOCATOR(XP,YP) CALL IMOUSECURSORSHOW() RETURN ENDIF CALL SETCOL(NUMCOL) CALL DISVALCOLORS(NUMCOL,NCL(1),NCL(2),NCL(3),IC) CALL ALLCOLOURS() GOTO 20 END SUBROUTINE DISVALCOLORS(NUMCOL,N1,N2,N3,IC) USE M_DEVICES implicit none integer :: ic integer :: n1 integer :: n2 integer :: n3 integer :: numcol CHARACTER TEXT*47 IF (IC .EQ. 1) THEN TEXT = 'COLOR NUMBER: RED: g : b : ' ELSE IF (IC .EQ. 2) THEN TEXT = 'COLOR NUMBER: r : GREEN: b : ' ELSE TEXT = 'COLOR NUMBER: r : g : BLUE: ' ENDIF WRITE(TEXT(15:17) ,'(I3)') NUMCOL WRITE(TEXT(23:25) ,'(I3)') N1 WRITE(TEXT(34:36) ,'(I3)') N2 WRITE(TEXT(44:46) ,'(I3)') N3 CALL KTEXT(TEXT,IWS-46,4,15) RETURN END SUBROUTINE EDITCOLOURTABLE(MODE,KEY) use unstruc_colors implicit none integer :: key integer :: mode integer :: n1 integer :: n1c integer :: n2 integer :: n2c integer :: n3 integer :: n3c integer :: nlevel integer :: nput integer :: num integer :: numb integer :: numcol integer :: numcolc integer :: nwhat double precision :: xp double precision :: yp COMMON /HELPNOW/ WRDKEY,NLEVEL CHARACTER TEX*26, WRDKEY*40, TEX2*4 TEX = ' EDIT COLORTABLE ' WRDKEY = TEX NLEVEL = 2 NUM = 0 NWHAT = 0 NPUT = 33 NUMB = 14 10 CONTINUE CALL DRAWNU(KEY) CALL ALLCOLOURS() CALL KTEXT(TEX,1,2,15) CALL putget_un(NUM,NWHAT,NPUT,NUMB,XP,YP,KEY) IF (NUM .NE. 0) THEN ! ER IS EEN KEUZE IF (NUM .EQ. 4) THEN MODE = NWHAT KEY = 3 RETURN ELSE CALL CHOICES(MODE,NUM,NWHAT,KEY) ENDIF ELSE IF (KEY .EQ. 21) THEN ! INS KEY IF (NPUT .EQ. 33) THEN CALL GETCOLORNUMBER(XP,YP,NUMCOLC,N1C,N2C,N3C) ! WRITE(TEX2,'(I4)') NUMCOLC ! CALL QNMESSAGE('COLOUR NR 1 = '//TEX2) NPUT = 34 ELSE IF (NPUT .EQ. 34) THEN CALL GETCOLORNUMBER(XP,YP,NUMCOL,N1,N2,N3) WRITE(TEX2,'(I4)') NUMCOL ! CALL QNMESSAGE('IS CHANGED TO THE COLOUR OF NR : '//TEX2) CALL IGRPALETTERGB(NUMCOLC,N1,N2,N3) NPUT = 33 ENDIF ELSE IF (KEY .EQ. 22) THEN ! ENTER KEY CALL CHANGECOLOR(XP,YP) ELSE IF (KEY .EQ. 23) THEN ! ESC CALL IGRPALETTERGB(NUMCOLC,N1C,N2C,N3C) ELSE IF (KEY .EQ. 98) THEN ! b RINGS BELL CALL KTEXT('B RINGS BELL',2,6,11) CALL OKAY(0) ENDIF ! GOTO 10 ! END SUBROUTINE GETCOLORNUMBER(XP,YP,NUMCOL,N1O,N2O,N3O) implicit none integer :: i integer :: n1 integer :: n1o integer :: n2 integer :: n2o integer :: n3 integer :: n3o integer :: numcol double precision :: xp double precision :: yp CALL IGRGETPIXELRGB(real(XP),real(YP),N1O,N2O,N3O) DO 10 I = 0,255 CALL SETCOL(I) CALL PTABS(XP,YP) CALL IGRGETPIXELRGB(real(XP),real(YP),N1,N2,N3) IF (N1 .EQ. N1O .AND. N2 .EQ. N2O .AND. N3 .EQ. N3O) THEN NUMCOL = I CALL DISVALCOLORS(NUMCOL,N1,N2,N3,1) RETURN ENDIF 10 CONTINUE RETURN END SUBROUTINE ALLCOLOURS() use m_wearelt implicit none double precision :: dx double precision :: dxc double precision :: dy double precision :: dyc integer :: i integer :: j integer :: ncol double precision :: x double precision :: xc double precision :: xl double precision :: xu double precision :: y double precision :: yc double precision :: yl double precision :: yu NCOL = 0 XL = X2-0.66d0*DSIX-RCIR*4 XU = XL+0.66d0*DSIX YL = Y1+DSIX YU = Y2-DSIX DX = XU-XL DY = YU-YL DXC = DX/20 DYC = DY/20 DO 10 J = 1,16 DO 10 I = 1,16 X = dble(I-1)/15d0 Y = dble(J-1)/15d0 XC = XL + X*DX YC = YL + Y*DY CALL SETCOL(NCOL) NCOL = NCOL + 1 CALL FBOX(XC-DXC,YC-DYC,XC+DXC,YC+DYC) CALL SETCOL(0) CALL BOX(XC-DXC,YC-DYC,XC+DXC,YC+DYC) 10 CONTINUE RETURN END subroutine TEKTXT () use m_wearelt implicit none integer :: ia integer, save :: ini = 0 integer :: k integer :: maxtxt integer :: ntxt ! ------------------------------------------------------------------ ! tekenen van de strings die in een file staan en ingelezen zijn met ! REATXT ! ------------------------------------------------------------------ common /XYTEXT/ xtxt,ytxt,coltxt,symtxt,heitxt,ntxt common /TEXTSS/ xytexts parameter (maxtxt = 2000) double precision :: xtxt(maxtxt), ytxt(maxtxt),heitxt(maxtxt) integer symtxt(maxtxt), coltxt(maxtxt) character xytexts(maxtxt)*120 if (ini .eq. 0) then ntxt = 0 ini = 1 endif IF (NTXT .LE. 0) RETURN ! call IGrSymbSet('calctek.smb') ! call IGrCharSet('symbols.chr') ! call IGrCharSize(3.0,3.0) ! call IGrCharJustify ('C') do 10 k = 1,ntxt call SETCOL (coltxt(k)) ! call IGRMOVETO ( xtxt(k),ytxt(k) ) ! call IGRCIRCLEREL ( rcir ) call IGrCharJustify ('C') call IGrCharSize (real(heitxt(k)),real(heitxt(k))) if (symtxt(k) .ne. 0) then call IGrSymbOut (real(xtxt(k)),real(ytxt(k)),symtxt(k)) endif call IGrMoveTo ( real(xtxt(k)+1.1*rcir),real(ytxt(k)) ) ia = len_trim(xytexts(k)) call IGrCharJustify ('L') call DRAWTEXT ( real(xtxt(k)+1.1*rcir),real(ytxt(k)),xytexts(k)(1:ia)) 10 continue call IGrCharSize (0.5,0.5) return end ! SUBROUTINE GETPOS(X,Y) implicit none double precision :: x double precision :: y REAL INFOGRAPHICS X = INFOGRAPHICS(1) Y = INFOGRAPHICS(2) RETURN END SUBROUTINE SETWOR(XW1,YW1,XW2,YW2) use unstruc_opengl implicit none double precision :: XW1,YW1,XW2,YW2 IF (XW1 .EQ. XW2 .OR. YW1 .EQ. YW2) THEN XW2 = XW1+1 YW2 = YW1+1 ENDIF IF (InOpenGLRendering) THEN #ifdef HAVE_OPENGL ! CALL fglDisable(GL_DEPTH_TEST) ! no depth CALL fglMatrixMode (GL_PROJECTION) CALL fglLoadIdentity() CALL fglOrtho(XW1,XW2,YW1,YW2,0,1) CALL fglMatrixMode (GL_MODELVIEW) #endif else CALL IGrUnits(real(XW1),real(YW1),real(XW2),real(YW2)) endif RETURN END ! SUBROUTINE ASPECT(X1D,Y1D,X2D,Y2D) use m_devices implicit none double precision :: asp double precision :: x1d double precision :: x2d double precision :: y1d double precision :: y2d ! RETURN Y2 AS 1.0 ASPECT RATIO VALUE CALL INQASP(ASP) Y2D = Y1D + (X2D - X1D)*ASP RETURN END ! SUBROUTINE SETWY(X1,Y1,X2,Y2) use unstruc_display, only : rcir, cr, dsix use m_sferic implicit none double precision :: x1, x2, y1, y2 double precision :: yw, asp, xw, x0, y0 ! SET WORLD COORDINATES WITH Y2 AS 1.0 ASPECT RATIO VALUE ! AND RETURN Y2 CALL ASPECT(X1,Y1,X2,Y2) IF (JSFERIC .EQ. 1 .and. jsfertek==1) THEN call inqasp(asp) x0 = 0.5*(x1+x2) y0 = 0.5*(y1+y2) YW = y2 - y1 xw = yw/ ( asp*COS( DG2RD*y0) ) x1 = x0 - 0.5*xw x2 = x0 + 0.5*xw ENDIF CALL SETWOR(X1,Y1,X2,Y2) RCIR = CR*(X2 - X1) DSIX = (X2 - X1)/6 CALL XYDISFORMAT() RETURN END ! SUBROUTINE TOPIX(X,Y,NX,NY) implicit none integer :: nx integer :: ny double precision :: x double precision :: y ! GIVE SCREEN COORDINATES OF WORLDCOORDINATES CALL IGRUNITSTOPIXELS(real(X),real(Y),NX,NY) RETURN END ! SUBROUTINE TOWOR(NX,NY,X,Y) implicit none integer :: nx integer :: ny double precision :: x double precision :: y real :: rx, ry ! GIVE WORLD COORDINATES OF SCREENCOORDINATES CALL IGRUNITSFROMPIXELS(NX,NY,rx, ry) X = dble(rx) Y = dble(ry) RETURN END SUBROUTINE ONETOPIX(X,Y,NX,NY) use m_devices implicit none integer :: nx integer :: ny double precision :: x double precision :: y NX = X*NPX NY = Y*NPY RETURN END ! SUBROUTINE MOVABS(X,Y) use unstruc_opengl implicit none double precision :: x,y IF (InOpenGLRendering) THEN CALL MoveTo(X,Y) ELSE CALL IGRMOVETO(real(X),real(Y)) ENDIF END SUBROUTINE LNABS(X,Y) use unstruc_opengl implicit none double precision :: x,y IF (InOpenGLRendering) THEN CALL LineTo(X,Y) ELSE CALL IGRLINETO(real(X),real(Y)) ENDIF END SUBROUTINE LINEWIDTH(iW) use unstruc_opengl implicit none integer :: iw IF (InOpenGLRendering) THEN CALL SetLineWidth(iw) ELSE CALL IGRLINEWIDTH(iw,iw) ENDIF END SUBROUTINE SUBROUTINE cLNABS(X,Y,ncol) implicit none double precision :: x,y integer :: ncol call setcol(ncol) CALL LNABS(X,Y) END SUBROUTINE RECTANGLE(x1,y1,x2,y2) use unstruc_opengl implicit none real x1,y1,x2,y2 real x(4),y(4) IF (InOpenGLRendering) THEN x(1) = x1 x(2) = x2 x(3) = x2 x(4) = x1 y(1) = y1 y(2) = y1 y(3) = y2 y(4) = y2 CALL PFILLERCORE(x,y,4) ELSE CALL IGRRECTANGLE(x1,y1,x2,y2) ENDIF END SUBROUTINE SUBROUTINE PTABS(X,Y) use unstruc_opengl implicit none double precision :: x,y if (InOpenGLRendering) THEN CALL DrawPoint(real(x),real(y)) ELSE CALL IGRPOINT(real(X),real(Y)) ENDIF END SUBROUTINE DTEKTRI(X1,Y1,Z1,X2,Y2,Z2,X3,Y3,Z3,NCOL,NCOLR) implicit none integer :: ncol integer :: ncolr double precision :: zz double precision :: XX(3), YY(3) DOUBLE PRECISION X1,Y1,Z1,X2,Y2,Z2,X3,Y3,Z3 CALL DRIETWEE(X1,Y1,Z1,XX(1),YY(1),ZZ) CALL DRIETWEE(X2,Y2,Z2,XX(2),YY(2),ZZ) CALL DRIETWEE(X3,Y3,Z3,XX(3),YY(3),ZZ) CALL PFILLER(XX,YY,3,NCOL,NCOLR) RETURN END SUBROUTINE DTEKPENTA(X1,Y1,Z1,X2,Y2,Z2,X3,Y3,Z3,X4,Y4,Z4,X5,Y5,Z5,NCOL,NCOLR) implicit none integer :: ncol integer :: ncolr double precision :: zz double precision :: XX(5), YY(5) DOUBLE PRECISION X1,Y1,Z1,X2,Y2,Z2,X3,Y3,Z3,X4,Y4,Z4,X5,Y5,Z5 CALL DRIETWEE(X1,Y1,Z1,XX(1),YY(1),ZZ) CALL DRIETWEE(X2,Y2,Z2,XX(2),YY(2),ZZ) CALL DRIETWEE(X3,Y3,Z3,XX(3),YY(3),ZZ) CALL DRIETWEE(X4,Y4,Z4,XX(4),YY(4),ZZ) CALL DRIETWEE(X5,Y5,Z5,XX(5),YY(5),ZZ) CALL PFILLER(XX,YY,5,NCOL,NCOLR) RETURN END SUBROUTINE DPFILLER(X,Y,Z,N,NCOL,NCOLR) implicit none integer :: k integer :: n integer :: ncol integer :: ncolr double precision :: zz DOUBLE PRECISION X(N),Y(N),Z(N) double precision :: XX(100), YY(100) DO K = 1,N CALL DRIETWEE(X(K),Y(K),Z(K),XX(K),YY(K),ZZ) ENDDO CALL PFILLER(XX,YY,N,NCOL,NCOLR) RETURN END SUBROUTINE DMOVABS(XD,YD,ZD) USE M_OLDZ implicit none double precision :: x double precision :: y double precision :: z DOUBLE PRECISION XD,YD,ZD CALL DRIETWEE(XD,YD,ZD,X,Y,Z) CALL MOVABS(X,Y) OZ = Z END SUBROUTINE DLNABS(XD,YD,ZD) USE M_OLDZ USE M_MISSING implicit none double precision :: x double precision :: y double precision :: z DOUBLE PRECISION XD,YD,ZD CALL DRIETWEE(XD,YD,ZD,X,Y,Z) !IF (OZ .NE. DMISS .AND. Z .NE. DMISS) THEN CALL LNABS(X,Y) !ENDIF OZ = Z END SUBROUTINE DPTABS(XD,YD,ZD) implicit none double precision :: x double precision :: y double precision :: z DOUBLE PRECISION XD,YD,ZD CALL DRIETWEE(XD,YD,ZD,X,Y,Z) CALL PTABS(X,Y) END ! SUBROUTINE LNREL(X,Y) implicit none double precision :: x double precision :: y CALL IGRLINETOREL(real(X),real(Y)) END ! SUBROUTINE BOX(XB1,YB1,XB2,YB2) implicit none double precision :: xb1 double precision :: xb2 double precision :: yb1 double precision :: yb2 call MOVABS(XB1,YB1) call LNABS(XB2,YB1) call LNABS(XB2,YB2) call LNABS(XB1,YB2) call LNABS(XB1,YB1) RETURN END SUBROUTINE FBOX(XB1,YB1,XB2,YB2) implicit none integer :: ndraw double precision :: xb1 double precision :: xb2 double precision :: yb1 double precision :: yb2 COMMON /DRAWTHIS/ NDRAW(40) if (ndraw(10) == 0) then call RECTANGLE(real(XB1),real(YB1),real(XB2),real(YB2)) else call fboxold(XB1,YB1,XB2,YB2) endif RETURN END SUBROUTINE FBOXOLD(XB1,YB1,XB2,YB2) implicit none integer :: n integer :: ncolnow double precision :: xb1 double precision :: xb2 double precision :: yb1 double precision :: yb2 COMMON /COLNOW/ NCOLNOW REAL X(4), Y(4) N = 4 X(1) = real(XB1) X(2) = real(XB2) X(3) = real(XB2) X(4) = real(XB1) Y(1) = real(YB1) Y(2) = real(YB1) Y(3) = real(YB2) Y(4) = real(YB2) IF (NCOLNOW .GE. 0) CALL PFILLERCORE(X,Y,N) RETURN END SUBROUTINE BOXX(X,Y,NCOL) implicit none integer :: ncol integer :: ncolnow double precision :: x double precision :: y COMMON /COLNOW/ NCOLNOW CALL SETCOL(NCOL) IF (NCOLNOW .GE. 0) CALL IGrMARKER(real(X),real(Y),3) RETURN END ! SUBROUTINE CLR() implicit none CALL IWINCLEAR() END ! SUBROUTINE CLS1() use unstruc_display implicit none integer :: ndraw COMMON /DRAWTHIS/ NDRAW(40) Call IGRAREACLEAR() IF (NDRAW(10) .EQ. 2) THEN CALL IGRPALETTERGB( 2,NREDP,NGREENP,NBLUEP) ELSE CALL IGRPALETTERGB( 2,NREDS,NGREENS,NBLUES) ENDIF CALL SETCOL(2) CALL FBOX(X1,Y1,X2,Y2) RETURN END ! SUBROUTINE INQASP(ASP) USE M_DEVICES implicit none double precision :: asp double precision :: dx double precision :: dy integer :: jaxis integer :: nunix double precision :: xleft double precision :: xright double precision :: ybot double precision :: ytop COMMON /SCREENAREA/ XLEFT,YBOT,JAXIS YTOP = MAX(0.95d0,1 - YBOT) XRIGHT = MAX(0.90d0,1 - XLEFT) DX = XRIGHT- XLEFT DY = YTOP - YBOT ASP = ( DY*dble(NPY) ) / ( DX*dble(NPX) ) RETURN END ! SUBROUTINE SETXOR(I) implicit none integer :: i ! IF (I .EQ. 1) THEN CALL IGRPLOTMODE('E') ELSE IF (I .EQ. 0) THEN CALL IGRPLOTMODE('N') ENDIF ! RETURN END ! SUBROUTINE FRAMES(NCOL) USE M_DEVICES implicit none integer :: ncol IF (NOPSYS .Ge. 2) RETURN CALL SETCOL(NCOL) CALL IGRBORDER() RETURN END SUBROUTINE FRAMES2(NCOL) USE M_DEVICES implicit none integer :: ncol CALL SETCOL(NCOL) CALL IGRBORDER() RETURN END ! SUBROUTINE DISPF(Y,N,NCOL) implicit none integer :: i integer :: n integer :: ncol ! LAAT EENDIMENSIONALE FUNCTIE ZIEN double precision :: Y(N) CALL SETCOL(NCOL) CALL MOVABS(0d0,Y(1)) DO 10 I = 1,N CALL LNABS(dble(I),Y(I)) 10 CONTINUE RETURN END ! SUBROUTINE DISPF2(X,Y,N,NMAX,NCOL) implicit none integer :: i integer :: n integer :: ncol integer :: nmax ! LAAT EENDIMENSIONALE FUNCTIE ZIEN double precision :: X(NMAX), Y(NMAX) CALL SETCOL(NCOL) CALL MOVABS(X(1),Y(1)) DO I = 2,N CALL LNABS(X(I),Y(I)) enddo RETURN END SUBROUTINE DISPF2cir(X,Y,N,RCIR,NCOL) implicit none integer :: i integer :: n integer :: ncol integer :: nmax ! LAAT EENDIMENSIONALE FUNCTIE ZIEN met cirkels double precision :: X(N), Y(N), rcir CALL SETCOL(NCOL) CALL MOVABS(X(1),Y(1)) if (rcir > 0) CALL CIR(RCIR) DO I = 2,N CALL LNABS(X(I),Y(I)) if (rcir > 0) CALL CIR(RCIR) enddo RETURN END ! SUBROUTINE DISP2C(X,Y,N,RCIR,NCOL) USE M_MISSING implicit none integer :: n, ncol double precision :: X(N), Y(N), rcir integer :: i, istart, key, in logical :: inview ! LAAT EEN TWEEDIMENSIONALE FUNCTIE ZIEN MET CIRKELS IF (N .LE. 0) RETURN CALL SETCOL(NCOL) CALL JGRLINE8(x,y,N) if (rcir == 0) return IF ( NCOL.NE.0 ) THEN in = 0 DO I = 1,N if ( INVIEW(X(i),Y(i)) ) then CALL MOVABS(X(I),Y(I)) CALL CIR(RCIR) in = in + 1 if (in > 5000) exit endif enddo CALL SETCOL(31) ISTART = 0 DO I = 1,N IF (X(I) .NE. dmiss) THEN IF (ISTART .EQ. 1) THEN ELSE CALL MOVABS(X(I),Y(I)) CALL CIR(RCIR) ISTART = 1 ENDIF ELSE ISTART = 0 ENDIF END DO END IF RETURN END SUBROUTINE DISP3C(X,Y,Z,NCL,N,RCIR,NCOL) USE M_MISSING implicit none integer :: i integer :: istart integer :: key integer :: n integer :: ncol double precision :: rcir ! LAAT EEN TWEEDIMENSIONALE FUNCTIE ZIEN MET CIRKELS EN KLEUREN DOUBLE PRECISION X(N), Y(N), Z(N) INTEGER NCL(N), ja, jacol IF (N .LE. 0) RETURN CALL SETCOL(NCOL) jacol = 0 do i = 1,n if (ncl(i) .ne. 0) then jacol = 1 exit endif enddo if (jacol == 0) then CALL JGRLINE8(x,y,N) else ISTART = 0 ja = 0 DO I = 1,N IF (X(I) .NE. dmiss) THEN IF (ISTART .EQ. 1) THEN CALL DLNABS(X(I),Y(I),Z(I)) ELSE IF (NCL(I) .NE. 0) THEN CALL SETCOL(NCL(I)) ENDIF CALL DMOVABS(X(I),Y(I),Z(I)) ISTART = 1 ENDIF CALL CIR(RCIR) ELSE ISTART = 0 ENDIF IF (MOD(I,50) .EQ. 0) THEN CALL HALT2(ja) IF (ja .EQ. 1) RETURN ENDIF enddo endif RETURN END SUBROUTINE DISP3CAB(X,Y,Z,NCL,N,RCIR,NCOL,A,B) USE M_MISSING implicit none double precision :: a double precision :: b integer :: i integer :: istart integer :: key integer :: n integer :: ncol double precision :: rcir ! LAAT EEN TWEEDIMENSIONALE FUNCTIE ZIEN MET CIRKELS EN KLEUREN DOUBLE PRECISION X(N), Y(N), Z(N) INTEGER NCL(N) IF (N .LE. 0) RETURN CALL SETCOL(NCOL) ISTART = 0 DO 10 I = 1,N IF (X(I) .NE. dmiss) THEN IF (ISTART .EQ. 1) THEN CALL DLNABS(A*X(I)+B,Y(I),Z(I)) ELSE IF (NCL(I) .NE. 0) CALL SETCOL(NCL(I)) CALL DMOVABS(A*X(I)+B,Y(I),Z(I)) ISTART = 1 ENDIF CALL CIR(RCIR) ELSE ISTART = 0 ENDIF IF (MOD(I,50) .EQ. 0) THEN CALL HALT2(KEY) IF (KEY .EQ. 1) RETURN ENDIF 10 CONTINUE RETURN END SUBROUTINE DISP4C(X,Y,N) USE M_MISSING implicit none integer :: i integer :: istart integer :: key integer :: n ! LAAT EEN TWEEDIMENSIONALE FUNCTIE ZIEN MET CIRKELS double precision :: X(N), Y(N) IF (N .LE. 0) RETURN ISTART = 0 DO 10 I = 1,N IF (X(I) .NE. dmiss) THEN IF (ISTART .EQ. 1) THEN CALL LNABS(X(I),Y(I)) ELSE CALL MOVABS(X(I),Y(I)) ISTART = 1 ENDIF CALL RCIRC(X(I),Y(I)) ELSE ISTART = 0 ENDIF IF (MOD(I,50) .EQ. 0) THEN CALL HALT2(KEY) IF (KEY .EQ. 1) RETURN ENDIF 10 CONTINUE RETURN END ! SUBROUTINE DISPFP(X,Y,N,NCOL) implicit none integer :: i integer :: n integer :: ncol ! LAAT EEN EENDIMENSIONALE FUNCTIE ZIEN MET PUNTJES double precision :: X(N), Y(N) CALL SETCOL(NCOL) DO 10 I = 1,N CALL MOVABS(X(I),Y(I)) CALL CIR(0d0) 10 CONTINUE RETURN END ! SUBROUTINE DISP2P(X,Y,MMAX,MC,NC,NCOL) implicit none integer :: i integer :: j integer :: mc integer :: mmax integer :: nc integer :: ncol ! LAAT EEN TWEEDIMENSIONALE FUNCTIE ZIEN MET PUNTJES double precision :: X(MMAX,MMAX), Y(MMAX,MMAX) CALL SETCOL(NCOL) DO 10 I = 1,MC DO 10 J = 1,NC IF (X(I,J) .NE. 0) THEN CALL MOVABS(X(I,J),Y(I,J)) CALL CIR(0d0) ENDIF 10 CONTINUE RETURN END SUBROUTINE DISPXP(X,Y,N,NCOL) implicit none integer :: i integer :: n integer :: ncol double precision :: y ! LAAT TWEEDIMENSIONALE FUNCTIE PUNTJES ZIEN double precision :: X(N) CALL SETCOL(NCOL) DO 10 I = 1,N CALL MOVABS(X(I),Y) CALL CIR(0d0) 10 CONTINUE RETURN END SUBROUTINE DISPF1(Y,DX,N,NCOL) implicit none double precision :: dx integer :: i integer :: n integer :: ncol double precision :: x ! LAAT EENDIMENSIONALE FUNCTIE ZIEN MET INTERVAL double precision :: Y(N) CALL SETCOL(NCOL) X = 0 CALL MOVABS(X,Y(1)) DO 10 I = 2,N X = X + DX CALL LNABS(X,Y(I)) 10 CONTINUE RETURN END !> Draw a highlighted circle at current position. !! Highlighted means: blank center, coloured outline. subroutine HLCIR(R, icol) implicit none double precision, intent(in) :: R !< Radius in world coords. integer, intent(in) :: icol !< Colour number call HLCIR2(R, 0, icol) end subroutine HLCIR !> Draw a filled circle at current position. !! Filled means: one colour for inside, one colour for edge. subroutine HLCIR2(R, icolfill, icoledge) implicit none double precision, intent(in) :: R !< Radius in world coords. integer, intent(in) :: icolfill !< Colour number for inner fill integer, intent(in) :: icoledge !< Colour number for edge CALL IGRFILLPATTERN(4,0,0) CALL SETCOL(icolfill) CALL CIR(R) CALL IGRFILLPATTERN(0,0,0) CALL SETCOL(icoledge) CALL CIR(R) CALL IGRFILLPATTERN(4,0,0) end subroutine HLCIR2 SUBROUTINE CIR(R) use unstruc_opengl implicit none integer :: ncolnow double precision :: r COMMON /COLNOW/ NCOLNOW if (r == 0d0) return IF (InOpenGLRendering) THEN CALL SetPointSize(real(5)) CALL DrawPoint(xlast,ylast) CALL SetPointSize(real(1)) ELSE CALL IGrCircleRel(real(R)) ENDIF END SUBROUTINE KCIR(X,Y,Z) use unstruc_colors USE M_MISSING use m_wearelt implicit none integer :: ncol double precision :: x double precision :: y double precision :: z IF (Z .NE. dmiss) THEN CALL ISOCOL(Z,NCOL) CALL MOVABS(X,Y) CALL CIR(RCIR) ELSE CALL SETCOL(ncolhl) CALL MOVABS(X,Y) CALL CIR(RCIR) ENDIF RETURN END SUBROUTINE DKCIR(XD,YD,ZD,V) implicit none double precision :: v double precision :: x double precision :: y double precision :: z DOUBLE PRECISION XD,YD,ZD CALL DRIETWEE(XD,YD,ZD,X,Y,Z) CALL KCIR(X,Y,V) RETURN END SUBROUTINE RCIRC(X,Y) use m_wearelt implicit none double precision :: x double precision :: y CALL MOVABS(X,Y) CALL CIR(RCIR) RETURN END subroutine plotCross(x, y) use m_wearelt implicit none double precision :: x double precision :: y CALL MOVABS(X-.5*RCIR,Y-.5*RCIR) CALL LNABS(X+.5*RCIR, Y+.5*RCIR) CALL MOVABS(X-.5*RCIR,Y+.5*RCIR) CALL LNABS(X+.5*RCIR, Y-.5*RCIR) RETURN END subroutine plotDiamond(x, y) use m_wearelt implicit none double precision :: x double precision :: y CALL MOVABS(X+.5*RCIR,Y) CALL LNABS(X, Y+.5*RCIR) CALL LNABS(X-.5*RCIR,Y) CALL LNABS(X, Y-.5*RCIR) CALL LNABS(X+.5*RCIR,Y) RETURN END SUBROUTINE DRCIRC(XD,YD,ZD) implicit none double precision :: x double precision :: y double precision :: z DOUBLE PRECISION XD,YD,ZD CALL DRIETWEE(XD,YD,ZD,X,Y,Z) CALL RCIRC(X,Y) RETURN END SUBROUTINE KREC(X,Y,Z,XD) implicit none integer :: ncol integer :: ncolnow double precision :: x double precision :: xd double precision :: y double precision :: z COMMON /COLNOW/ NCOLNOW CALL ISOCOL(Z,NCOL) IF (NCOLNOW .GE. 0) call RECTANGLE(real(X-XD),real(Y-XD),real(X+XD),real(Y+XD)) RETURN END SUBROUTINE CIRR(X,Y,NCOL) use m_wearelt implicit none integer :: ncol double precision :: x double precision :: y CALL SETCOL(NCOL) CALL MOVABS(X,Y) CALL CIR(RCIR) RETURN END SUBROUTINE DCIRR(XD,YD,ZD,NCOL) implicit none integer :: ncol double precision :: x double precision :: y double precision :: z DOUBLE PRECISION XD,YD,ZD CALL DRIETWEE(XD,YD,ZD,X,Y,Z) CALL CIRR(X,Y,NCOL) RETURN END SUBROUTINE PFILLER(X,Y,N_,NCOL,NCLR) use unstruc_opengl implicit none integer :: N_ integer :: nclr integer :: ncol integer :: ncolnow integer :: ndraw double precision :: X(N_), Y(N_) COMMON /DRAWTHIS/ NDRAW(40) COMMON /COLNOW/ NCOLNOW integer :: N integer, parameter :: NMAX = 128 real xr(NMAX), yr(NMAX) CALL SETCOL(NCOL) ! safety N = min(N_, NMAX) xr(1:N) = x(1:N) yr(1:N) = y(1:N) CALL PFILLERCORE(xr,yr,N) IF (.NOT. InOpenGLRendering .AND. (NCLR .NE. NCOL .or. ndraw(10) .ne. 0)) then CALL realPolygon(Xr,Yr,N,NCLR) ENDIF RETURN END SUBROUTINE PFILLERCORE(XR,YR,N) use unstruc_opengl implicit none integer :: n real xr(N), yr(N) IF (InOpenGLRendering) THEN CALL FillPolygon(xr,yr,n) ELSE if (n .le. 4) then call igrpolygonsimple(xr,yr,n) else CALL IGrPolygoncomplex(Xr,Yr,N) endif ENDIF END SUBROUTINE SUBROUTINE POLYLINE(XR,YR,N) use unstruc_opengl implicit none integer :: n, I real xr(N), yr(N) IF (InOpenGLRendering) THEN CALL MOVABS(dble(XR(1)),dble(YR(1))) DO 10 I = 2,N call LNABS(dble(XR(I)),dble(YR(I))) 10 CONTINUE ELSE CALL IGRPOLYLINE(XR,YR,N) ENDIF END SUBROUTINE SUBROUTINE POLYGON(X,Y,N,NCOL) implicit none integer :: i integer :: n integer :: ncol integer :: ncolnow double precision :: X(N), Y(N) COMMON /COLNOW/ NCOLNOW CALL SETCOL(NCOL) call PTABS(X(1),Y(1)) DO 10 I = 2,N call LNABS(X(I),Y(I)) 10 CONTINUE call LNABS(X(1),Y(1)) RETURN END SUBROUTINE realPOLYGON(X,Y,N,NCOL) implicit none integer :: i integer :: n integer :: ncol integer :: ncolnow real :: X(N), Y(N) COMMON /COLNOW/ NCOLNOW CALL SETCOL(NCOL) call PTABS(dble(X(1)),dble(Y(1))) DO 10 I = 2,N call LNABS(dble(X(I)),dble(Y(I))) 10 CONTINUE call LNABS(dble(X(1)),dble(Y(1))) RETURN END LOGICAL FUNCTION INVNOD(K) use m_netw implicit none integer :: k LOGICAL INVIEW INVNOD = INVIEW( XK(K), YK(K) ) RETURN END LOGICAL FUNCTION INVLIN(L) use m_netw implicit none integer :: k1 integer :: k2 integer :: l LOGICAL INVIEW K1 = KN(1,L) K2 = KN(2,L) INVLIN = INVIEW( XK(K1), YK(K1) ) .OR. INVIEW( XK(K2), YK(K2) ) RETURN END SUBROUTINE ISOFIL(X,Y,Z,n4,NCOLR) implicit none integer :: n4, ncolr double precision :: X(n4), Y(n4), Z(n4) double precision :: dv, dzn, frac integer :: i, ih, j, j1, j2, jaauto integer :: ncol integer :: ncols integer :: ndraw integer :: nie integer :: nis integer :: npics integer :: num integer :: nv integer :: nx1 integer :: nx3 integer :: ny1 integer :: ny3 double precision :: val double precision :: vmax double precision :: vmin double precision :: zmax double precision :: zmin double precision :: znex double precision :: znow double precision :: DX(12),DY(12), DZ(12), XH(12),YH(12) COMMON /DEPMAX/ VMAX,VMIN,DV,VAL(256),NCOLS(256),NV,NIS,NIE,JAAUTO COMMON /DRAWTHIS/ NDRAW(40) DO 10 I = 1,n4 J = I + 1 IF (I .EQ. n4) J = 1 DX(I) = X(J) - X(I) DY(I) = Y(J) - Y(I) DZ(I) = Z(J) - Z(I) 10 CONTINUE ZMAX = Z(1) ZMIN = Z(1) DO 15 I = 2,n4 ZMAX = MAX(ZMAX,Z(I)) ZMIN = MIN(ZMIN,Z(I)) 15 CONTINUE IF (ZMAX .LE. VAL(1)) THEN NCOL = NCOLS(1) CALL PFILLER(X,Y,n4,NCOL,NCOL) ELSE IF (ZMIN .GE. VAL(NV)) THEN NCOL = NCOLS(NV+1) CALL PFILLER(X,Y,n4,NCOL,NCOL) ELSE DO 20 I = 0,NV IF (I .EQ. 0) THEN ZNOW = -1E+30 ELSE ZNOW = VAL(I) ENDIF IF (I .EQ. NV) THEN ZNEX = 1E+30 ELSE ZNEX = VAL(I+1) ENDIF NCOL = NCOLS(I + 1) IF (ZMIN .LE. ZNOW .AND. ZMAX .GE. ZNOW .OR. & ZMIN .LE. ZNEX .AND. ZMAX .GE. ZNEX ) THEN IH = 1 DO 30 J1 = 1,n4 J2 = J1 + 1 IF (J1 .EQ. n4) J2 = 1 IF (Z(J1) .LT. ZNOW) THEN IF (Z(J2) .GT. ZNOW) THEN DZN = ZNOW - Z(J1) FRAC = DZN/DZ(J1) IF (FRAC .GT. 0d0 .AND. FRAC .LE. 1d0) THEN XH(IH) = X(J1) + FRAC*DX(J1) YH(IH) = Y(J1) + FRAC*DY(J1) IH = IH + 1 ENDIF ENDIF IF (Z(J2) .GT. ZNEX) THEN DZN = ZNEX - Z(J1) FRAC = DZN/DZ(J1) IF (FRAC .GT. 0d0 .AND. FRAC .LE. 1d0) THEN XH(IH) = X(J1) + FRAC*DX(J1) YH(IH) = Y(J1) + FRAC*DY(J1) IH = IH + 1 ENDIF ENDIF ELSE IF (Z(J1) .GT. ZNEX) THEN IF (Z(J2) .LT. ZNEX) THEN DZN = ZNEX - Z(J1) FRAC = DZN/DZ(J1) IF (FRAC .GT. 0d0 .AND. FRAC .LE. 1d0) THEN XH(IH) = X(J1) + FRAC*DX(J1) YH(IH) = Y(J1) + FRAC*DY(J1) IH = IH + 1 ENDIF ENDIF IF (Z(J2) .LT. ZNOW) THEN DZN = ZNOW - Z(J1) FRAC = DZN/DZ(J1) IF (FRAC .GT. 0d0 .AND. FRAC .LE. 1d0) THEN XH(IH) = X(J1) + FRAC*DX(J1) YH(IH) = Y(J1) + FRAC*DY(J1) IH = IH + 1 ENDIF ENDIF ELSE XH(IH) = X(J1) YH(IH) = Y(J1) IH = IH + 1 IF (Z(J2) .LT. ZNOW) THEN DZN = ZNOW - Z(J1) FRAC = DZN/DZ(J1) IF (FRAC .GT. 0d0 .AND. FRAC .LE. 1d0) THEN XH(IH) = X(J1) + FRAC*DX(J1) YH(IH) = Y(J1) + FRAC*DY(J1) IH = IH + 1 ENDIF ELSE IF (Z(J2) .GT. ZNEX) THEN DZN = ZNEX - Z(J1) FRAC = DZN/DZ(J1) IF (FRAC .GT. 0d0 .AND. FRAC .LE. 1d0) THEN XH(IH) = X(J1) + FRAC*DX(J1) YH(IH) = Y(J1) + FRAC*DY(J1) IH = IH + 1 ENDIF ENDIF ENDIF 30 CONTINUE NUM = IH - 1 IF (NUM .GE. 3) THEN CALL PFILLER(XH,YH,NUM,NCOL,NCOL) ELSE IF (NUM .NE. 0) THEN ! CALL OKAY(1) ENDIF ELSE IF (ZMIN .GE. ZNOW .AND. ZMAX .LE. ZNEX) THEN CALL PFILLER(X,Y,n4,NCOL,NCOL) ENDIF 20 CONTINUE ENDIF IF (NDRAW(2) == -1 ) then ! .GE. 1) THEN ! vintage CALL TOPIX(X(1),Y(1),NX1,NY1) CALL TOPIX(X(3),Y(3),NX3,NY3) NPICS = ABS(NX1-NX3) + ABS(NY1-NY3) IF (NCOLR .EQ. 0) THEN IF (NPICS .GE. 5) THEN CALL SETCOL(NCOLR) CALL PTABS(X(1),Y(1)) ENDIF ELSE IF (NPICS .GE. 5) THEN NUM = n4 CALL POLYGON(X,Y,NUM,NCOLR) ELSE CALL SETCOL(NCOLR) CALL PTABS(X(1),Y(1)) ENDIF ENDIF ENDIF RETURN END subroutine isofil SUBROUTINE ISOFILb(X,Y,Z,n4,NCOLR) ! as isofil, now for depmax2 implicit none integer :: n4, ncolr double precision :: X(n4), Y(n4), Z(n4) double precision :: dv, dzn, frac integer :: i, ih, j, j1, j2, jaauto integer :: ncol integer :: ncols integer :: ndraw integer :: nie integer :: nis integer :: npics integer :: num integer :: nv integer :: nx1 integer :: nx3 integer :: ny1 integer :: ny3 double precision :: val double precision :: vmax double precision :: vmin double precision :: zmax double precision :: zmin double precision :: znex double precision :: znow double precision :: DX(10),DY(10), DZ(10), XH(10),YH(10) COMMON /DEPMAX2/ VMAX,VMIN,DV,VAL(256),NCOLS(256),NV,NIS,NIE,JAAUTO COMMON /DRAWTHIS/ NDRAW(40) DO 10 I = 1,n4 J = I + 1 IF (I .EQ. n4) J = 1 DX(I) = X(J) - X(I) DY(I) = Y(J) - Y(I) DZ(I) = Z(J) - Z(I) 10 CONTINUE ZMAX = Z(1) ZMIN = Z(1) DO 15 I = 2,n4 ZMAX = MAX(ZMAX,Z(I)) ZMIN = MIN(ZMIN,Z(I)) 15 CONTINUE IF (ZMAX .LE. VAL(1)) THEN NCOL = NCOLS(1) CALL PFILLER(X,Y,n4,NCOL,NCOL) ELSE IF (ZMIN .GE. VAL(NV)) THEN NCOL = NCOLS(NV+1) CALL PFILLER(X,Y,n4,NCOL,NCOL) ELSE DO 20 I = 0,NV IF (I .EQ. 0) THEN ZNOW = -1E+30 ELSE ZNOW = VAL(I) ENDIF IF (I .EQ. NV) THEN ZNEX = 1E+30 ELSE ZNEX = VAL(I+1) ENDIF NCOL = NCOLS(I + 1) IF (ZMIN .LE. ZNOW .AND. ZMAX .GE. ZNOW .OR. & ZMIN .LE. ZNEX .AND. ZMAX .GE. ZNEX ) THEN IH = 1 DO 30 J1 = 1,n4 J2 = J1 + 1 IF (J1 .EQ. n4) J2 = 1 IF (Z(J1) .LT. ZNOW) THEN IF (Z(J2) .GT. ZNOW) THEN DZN = ZNOW - Z(J1) FRAC = DZN/DZ(J1) IF (FRAC .GT. 0d0 .AND. FRAC .LE. 1d0) THEN XH(IH) = X(J1) + FRAC*DX(J1) YH(IH) = Y(J1) + FRAC*DY(J1) IH = IH + 1 ENDIF ENDIF IF (Z(J2) .GT. ZNEX) THEN DZN = ZNEX - Z(J1) FRAC = DZN/DZ(J1) IF (FRAC .GT. 0d0 .AND. FRAC .LE. 1d0) THEN XH(IH) = X(J1) + FRAC*DX(J1) YH(IH) = Y(J1) + FRAC*DY(J1) IH = IH + 1 ENDIF ENDIF ELSE IF (Z(J1) .GT. ZNEX) THEN IF (Z(J2) .LT. ZNEX) THEN DZN = ZNEX - Z(J1) FRAC = DZN/DZ(J1) IF (FRAC .GT. 0d0 .AND. FRAC .LE. 1d0) THEN XH(IH) = X(J1) + FRAC*DX(J1) YH(IH) = Y(J1) + FRAC*DY(J1) IH = IH + 1 ENDIF ENDIF IF (Z(J2) .LT. ZNOW) THEN DZN = ZNOW - Z(J1) FRAC = DZN/DZ(J1) IF (FRAC .GT. 0d0 .AND. FRAC .LE. 1d0) THEN XH(IH) = X(J1) + FRAC*DX(J1) YH(IH) = Y(J1) + FRAC*DY(J1) IH = IH + 1 ENDIF ENDIF ELSE XH(IH) = X(J1) YH(IH) = Y(J1) IH = IH + 1 IF (Z(J2) .LT. ZNOW) THEN DZN = ZNOW - Z(J1) FRAC = DZN/DZ(J1) IF (FRAC .GT. 0d0 .AND. FRAC .LE. 1d0) THEN XH(IH) = X(J1) + FRAC*DX(J1) YH(IH) = Y(J1) + FRAC*DY(J1) IH = IH + 1 ENDIF ELSE IF (Z(J2) .GT. ZNEX) THEN DZN = ZNEX - Z(J1) FRAC = DZN/DZ(J1) IF (FRAC .GT. 0d0 .AND. FRAC .LE. 1d0) THEN XH(IH) = X(J1) + FRAC*DX(J1) YH(IH) = Y(J1) + FRAC*DY(J1) IH = IH + 1 ENDIF ENDIF ENDIF 30 CONTINUE NUM = IH - 1 IF (NUM .GE. 3) THEN CALL PFILLER(XH,YH,NUM,NCOL,NCOL) ELSE IF (NUM .NE. 0) THEN ! CALL OKAY(1) ENDIF ELSE IF (ZMIN .GE. ZNOW .AND. ZMAX .LE. ZNEX) THEN CALL PFILLER(X,Y,n4,NCOL,NCOL) ENDIF 20 CONTINUE ENDIF IF (NDRAW(2) == -1 ) then ! .GE. 1) THEN ! vintage CALL TOPIX(X(1),Y(1),NX1,NY1) CALL TOPIX(X(3),Y(3),NX3,NY3) NPICS = ABS(NX1-NX3) + ABS(NY1-NY3) IF (NCOLR .EQ. 0) THEN IF (NPICS .GE. 5) THEN CALL SETCOL(NCOLR) CALL PTABS(X(1),Y(1)) ENDIF ELSE IF (NPICS .GE. 5) THEN NUM = n4 CALL POLYGON(X,Y,NUM,NCOLR) ELSE CALL SETCOL(NCOLR) CALL PTABS(X(1),Y(1)) ENDIF ENDIF ENDIF RETURN END subroutine isofilb SUBROUTINE ISOFILTRI(X,Y,Z,NCOLR) implicit none double precision :: dv double precision :: dzn double precision :: frac integer :: i integer :: ih integer :: j integer :: j1 integer :: j2 integer :: jaauto integer :: ncol integer :: ncolr integer :: ncols integer :: nie integer :: nis integer :: npics integer :: num integer :: nv integer :: nx1 integer :: nx3 integer :: ny1 integer :: ny3 double precision :: val double precision :: vmax double precision :: vmin double precision :: zmax double precision :: zmin double precision :: znex double precision :: znow double precision :: X(3), Y(3), Z(3), DX(3),DY(3), DZ(3), XH(10),YH(10) COMMON /DEPMAX/ VMAX,VMIN,DV,VAL(256),NCOLS(256),NV,NIS,NIE,JAAUTO DO 10 I = 1,3 J = I + 1 IF (I .EQ. 3) J = 1 DX(I) = X(J) - X(I) DY(I) = Y(J) - Y(I) DZ(I) = Z(J) - Z(I) 10 CONTINUE ZMAX = Z(1) ZMIN = Z(1) DO 15 I = 2,3 ZMAX = MAX(ZMAX,Z(I)) ZMIN = MIN(ZMIN,Z(I)) 15 CONTINUE IF (ZMAX .LE. VAL(1)) THEN NCOL = NCOLS(1) CALL PFILLER(X,Y,3,NCOL,NCOL) ELSE IF (ZMIN .GE. VAL(NV)) THEN NCOL = NCOLS(NV+1) CALL PFILLER(X,Y,3,NCOL,NCOL) ELSE DO 20 I = 0,NV IF (I .EQ. 0) THEN ZNOW = -1E+30 ELSE ZNOW = VAL(I) ENDIF IF (I .EQ. NV) THEN ZNEX = 1E+30 ELSE ZNEX = VAL(I+1) ENDIF NCOL = NCOLS(I + 1) IF (ZMIN .LE. ZNOW .AND. ZMAX .GE. ZNOW .OR. & ZMIN .LE. ZNEX .AND. ZMAX .GE. ZNEX ) THEN IH = 1 DO 30 J1 = 1,3 J2 = J1 + 1 IF (J1 .EQ. 3) J2 = 1 IF (Z(J1) .LT. ZNOW) THEN IF (Z(J2) .GT. ZNOW) THEN DZN = ZNOW - Z(J1) FRAC = DZN/DZ(J1) IF (FRAC .GT. 0d0 .AND. FRAC .LE. 1d0) THEN XH(IH) = X(J1) + FRAC*DX(J1) YH(IH) = Y(J1) + FRAC*DY(J1) IH = IH + 1 ENDIF ENDIF IF (Z(J2) .GT. ZNEX) THEN DZN = ZNEX - Z(J1) FRAC = DZN/DZ(J1) IF (FRAC .GT. 0d0 .AND. FRAC .LE. 1d0) THEN XH(IH) = X(J1) + FRAC*DX(J1) YH(IH) = Y(J1) + FRAC*DY(J1) IH = IH + 1 ENDIF ENDIF ELSE IF (Z(J1) .GT. ZNEX) THEN IF (Z(J2) .LT. ZNEX) THEN DZN = ZNEX - Z(J1) FRAC = DZN/DZ(J1) IF (FRAC .GT. 0d0 .AND. FRAC .LE. 1d0) THEN XH(IH) = X(J1) + FRAC*DX(J1) YH(IH) = Y(J1) + FRAC*DY(J1) IH = IH + 1 ENDIF ENDIF IF (Z(J2) .LT. ZNOW) THEN DZN = ZNOW - Z(J1) FRAC = DZN/DZ(J1) IF (FRAC .GT. 0d0 .AND. FRAC .LE. 1d0) THEN XH(IH) = X(J1) + FRAC*DX(J1) YH(IH) = Y(J1) + FRAC*DY(J1) IH = IH + 1 ENDIF ENDIF ELSE XH(IH) = X(J1) YH(IH) = Y(J1) IH = IH + 1 IF (Z(J2) .LT. ZNOW) THEN DZN = ZNOW - Z(J1) FRAC = DZN/DZ(J1) IF (FRAC .GT. 0d0 .AND. FRAC .LE. 1d0) THEN XH(IH) = X(J1) + FRAC*DX(J1) YH(IH) = Y(J1) + FRAC*DY(J1) IH = IH + 1 ENDIF ELSE IF (Z(J2) .GT. ZNEX) THEN DZN = ZNEX - Z(J1) FRAC = DZN/DZ(J1) IF (FRAC .GT. 0d0 .AND. FRAC .LE. 1d0) THEN XH(IH) = X(J1) + FRAC*DX(J1) YH(IH) = Y(J1) + FRAC*DY(J1) IH = IH + 1 ENDIF ENDIF ENDIF 30 CONTINUE NUM = IH - 1 IF (NUM .GE. 3) THEN CALL PFILLER(XH,YH,NUM,NCOL,NCOL) ELSE IF (NUM .NE. 0) THEN ! CALL OKAY(1) ENDIF ELSE IF (ZMIN .GE. ZNOW .AND. ZMAX .LE. ZNEX) THEN CALL PFILLER(X,Y,3,NCOL,NCOL) ENDIF 20 CONTINUE ENDIF CALL TOPIX(X(1),Y(1),NX1,NY1) CALL TOPIX(X(3),Y(3),NX3,NY3) NPICS = ABS(NX1-NX3) + ABS(NY1-NY3) IF (NCOLR .EQ. 0) THEN IF (NPICS .GE. 5) THEN CALL SETCOL(NCOLR) CALL PTABS(X(1),Y(1)) ENDIF ELSE IF (NPICS .GE. 5) THEN NUM = 3 CALL POLYGON(X,Y,NUM,NCOLR) ELSE CALL SETCOL(NCOLR) CALL PTABS(X(1),Y(1)) ENDIF ENDIF RETURN END SUBROUTINE FILLUP(TEXT,CHAR,LEN) implicit none integer :: i, len CHARACTER TEXT*(*), CHAR*1 DO 10 I = 1,LEN WRITE(TEXT(I:I),'(A)') CHAR 10 CONTINUE RETURN END !> Plot for hardcopy needs to be called twice: one to open hardcopy !! driver (file), then perform actual plotting, and second call to !! plot() closes the driver/file again. Steered by nopen argument. !! Normal snapshot sequence: nchdev .le. 12: 1 open , 2 close, 0 neutral !! Interactive screendump : nchdev .ge. 13: 1 dump ,-1 nothing , 0 neutral SUBROUTINE PLOT(NOPEN) use unstruc_colors use unstruc_display use unstruc_messages use unstruc_model, only: md_ident, md_snapshotdir, md_snapshot_seqnr use unstruc_opengl, only: jaopengl implicit none integer :: i integer :: ihcopts integer :: l integer :: nhcdev integer :: nopen, mout integer :: numhcopts integer, external :: numuni CHARACTER PLOTJE*255,EXT*4 COMMON /HARDCOPY/ NHCDEV,NUMHCOPTS,IHCOPTS(2,20) COMMON /PLOTFIL/ PLOTJE IF (md_snapshot_seqnr .EQ. 0) THEN PLOTJE = ' ' ENDIF if (Jaopengl == 1) then nhcdev = 14 endif ! file vullen: nhcdev .le. 12: 1 open , 2 dicht, 0 neutraal ! screendump : nhcdev .ge. 13: 1 dump ,-1 niks , 0 neutraal IF (NOPEN .EQ. 1) THEN mout = numuni() open (mout, file = trim(md_ident)//'.x1y1x2') write(mout,*) x1,y1, x2 close(mout) IF (NHCDEV .EQ. 1) THEN EXT = '.hgl' ELSE IF (NHCDEV .EQ. 2) THEN EXT = '.ps ' DO 5 I = 1,NUMHCOPTs IF (IHCOPTS(1,I) .EQ. 22) THEN IF (IHCOPTS(2,I) .EQ. 1) EXT = '.eps' ENDIF 5 CONTINUE ELSE IF (NHCDEV .EQ. 3) THEN EXT = '.acd' ELSE IF (NHCDEV .EQ. 4) THEN EXT = '.rgh' ELSE IF (NHCDEV .EQ. 5) THEN EXT = '.tkx' ELSE IF (NHCDEV .EQ. 6) THEN EXT = '.bmp' ELSE IF (NHCDEV .EQ. 7) THEN EXT = '.pcx' ELSE IF (NHCDEV .EQ. 8) THEN EXT = '.dxf' ELSE IF (NHCDEV .EQ. 9) THEN EXT = '.cgm' ELSE IF (NHCDEV .EQ. 10) THEN EXT = '.wpm' ELSE IF (NHCDEV .EQ. 11) THEN EXT = '.wmf' ELSE IF (NHCDEV .EQ. 12) THEN EXT = '.gl2' ELSE IF (NHCDEV .EQ. 13) THEN EXT = '.bmp' ELSE IF (NHCDEV .EQ. 14) THEN EXT = '.pcx' ENDIF L = len_trim( PLOTJE ) IF (L .EQ. 0) THEN md_snapshot_seqnr = md_snapshot_seqnr + 1 L = len_trim(md_snapshotdir) if (L > 0) then PLOTJE = md_snapshotdir L = L+1 plotje(L:L) = '/' end if WRITE (PLOTJE(L+1:),'(I6.6,A4)') md_snapshot_seqnr,EXT ELSE ! Not in use now, but it's possible through common /plotfil/ to specify file name. ! md_snapshotdir is not used then... WRITE (PLOTJE(L+1:),'(A4)') EXT ENDIF ! SET OPTIONS IF (NHCDEV .LE. 12) THEN NOPEN = 2 CALL IGRPALETTERGB( 0,NREDP,NGREENP,NBLUEP) CALL IGrHardCopySelect(1,NHCDEV) IF (NHCDEV .EQ. 7) CALL IGrHardCopySelect(1,6) DO 10 I = 1,NUMHCOPTS CALL IGrHardCopyOptions( IHCOPTS(1,I), IHCOPTS(2,I) ) 10 CONTINUE IF (NHCDEV .EQ. 7) CALL IGrHardCopyOptions(26,0) CALL IGrHardCopy(trim(PLOTJE)) !WRITE(msgbuf,'(2A)') 'You created plotfile ', trim(PLOTJE) ; call msg_flush() CALL IWINOPEN(1,1,20,1) CALL IWINOUTCENTRE(1,'creating '//trim(PLOTJE)) ELSE NOPEN = 2 ! CALL ISCREENSAVEIMAGE(trim(PLOTJE)) ! CALL IGRSAVEIMAGE(trim(PLOTJE)) ! PLOTJE = ' ' ENDIF ELSE IF (NOPEN .EQ. 2) THEN IF (NHCDEV .LE. 12) THEN CALL IWINCLOSE(1) CALL IGrHardCopy('S') CALL IGRPALETTERGB( 0, NREDS, NGREENS, NBLUES) NOPEN = 0 ELSE CALL ISCREENSAVEIMAGE(trim(PLOTJE)) WRITE(msgbuf,'(2A)') 'You created SCREENDUMP ', trim(PLOTJE) call msg_flush() NOPEN = 0 ENDIF PLOTJE = ' ' ELSE IF (NOPEN .EQ. -1) THEN NOPEN = 0 PLOTJE = ' ' ENDIF RETURN END SUBROUTINE ISOCEL(X,Y,P,NCOLR) implicit none double precision :: dv integer :: i integer :: ih integer :: ja integer :: jaauto integer :: ncolr integer :: ncols integer :: nh integer :: nie integer :: nis integer :: nplus integer :: nv double precision :: p double precision :: p1 double precision :: p2 double precision :: val double precision :: vmax double precision :: vmin double precision :: vn double precision :: x double precision :: x1 double precision :: x2 double precision :: xh double precision :: xhit double precision :: y double precision :: y1 double precision :: y2 double precision :: yh double precision :: yhit ! TEKENT ALLE NV ISOLIJNEN IN EEN CEL TEKAL-METHODE DIMENSION P(4),X(4),Y(4),XH(4),YH(4) COMMON /DEPMAX/ VMAX,VMIN,DV,VAL(256),NCOLS(256),NV,NIS,NIE,JAAUTO DO 10 I = 1,NV NPLUS = 1 VN = VAL(I) NH = 0 DO 20 IH = 1,4 IF (IH .EQ. 4) NPLUS = -3 P1 = P(IH) P2 = P(IH + NPLUS) X1 = X(IH) X2 = X(IH + NPLUS) Y1 = Y(IH) Y2 = Y(IH + NPLUS) CALL HITLIN(P1,P2,X1,Y1,X2,Y2,VN,XHIT,YHIT,JA) IF (JA .EQ. 1) THEN NH = NH + 1 XH(NH) = XHIT YH(NH) = YHIT ENDIF 20 CONTINUE ! IF (NH .GT. 1) CALL DISPF2(XH,YH,NH,4,NCOLS(I+1)) IF (NH .GT. 1) CALL DISPF2(XH,YH,NH,4,0) 10 CONTINUE IF (NCOLR .NE. 0) CALL DISPF2(X,Y,4,4,NCOLR) RETURN END SUBROUTINE ISOCELTRI(X,Y,P,NCOLR) implicit none double precision :: dv integer :: i integer :: ih integer :: ja integer :: jaauto integer :: ncolr integer :: ncols integer :: nh integer :: nie integer :: nis integer :: nplus integer :: nv double precision :: p double precision :: p1 double precision :: p2 double precision :: val double precision :: vmax double precision :: vmin double precision :: vn double precision :: x double precision :: x1 double precision :: x2 double precision :: xh double precision :: xhit double precision :: y double precision :: y1 double precision :: y2 double precision :: yh double precision :: yhit ! TEKENT ALLE NV ISOLIJNEN IN EEN CEL TEKAL-METHODE DIMENSION P(3),X(3),Y(3),XH(3),YH(3) COMMON /DEPMAX/ VMAX,VMIN,DV,VAL(256),NCOLS(256),NV,NIS,NIE,JAAUTO DO 10 I = 1,NV NPLUS = 1 VN = VAL(I) NH = 0 DO 20 IH = 1,3 IF (IH .EQ. 3) NPLUS = -2 P1 = P(IH) P2 = P(IH + NPLUS) X1 = X(IH) X2 = X(IH + NPLUS) Y1 = Y(IH) Y2 = Y(IH + NPLUS) CALL HITLIN(P1,P2,X1,Y1,X2,Y2,VN,XHIT,YHIT,JA) IF (JA .EQ. 1) THEN NH = NH + 1 XH(NH) = XHIT YH(NH) = YHIT ENDIF 20 CONTINUE ! IF (NH .GT. 1) CALL DISPF2(XH,YH,NH,3,NCOLS(I+1)) IF (NH .GT. 1) CALL DISPF2(XH,YH,NH,3,0) 10 CONTINUE IF (NCOLR .NE. 0) CALL DISPF2(X,Y,3,3,NCOLR) RETURN END SUBROUTINE HITLIN(P1,P2,X1,Y1,X2,Y2,V,XHIT,YHIT,JA) implicit none double precision :: dp double precision :: dv double precision :: dx double precision :: dy double precision :: frac integer :: ja double precision :: p1 double precision :: p2 double precision :: v double precision :: x1 double precision :: x2 double precision :: xhit double precision :: y1 double precision :: y2 double precision :: yhit ! SNIJDT EEN ISOLIJN EEN LIJNTJE ? DX = X2 - X1 DY = Y2 - Y1 DP = P2 - P1 DV = V - P1 IF (DP .NE. 0) THEN FRAC = DV/DP ELSE IF (V .EQ. P2) THEN FRAC = 1d0 ELSE FRAC = 0 ENDIF JA = 0 IF (0d0 .LT. FRAC .AND. FRAC .LE. 1d0) THEN JA = 1 XHIT = X1 + FRAC*DX YHIT = Y1 + FRAC*DY ENDIF RETURN END SUBROUTINE DISPOS() use m_devices implicit none integer :: jashow integer :: jav integer :: jmouse integer :: jview double precision :: xa double precision :: xlc double precision :: xyz double precision :: ya double precision :: ylc COMMON /HOWTOVIEW/ JVIEW, JAV, XYZ ! 1,2,3 OF 4 COMMON /LOCATORA/ XLC,YLC,XA,YA,JMOUSE,JASHOW common /dispfor/ xyform, zform, disform character*6 xyform, zform, disform CHARACTER POSITI*23 POSITI = 'X,Y: , ' IF (JVIEW .EQ. 2) THEN POSITI = 'Z,Y: , ' ELSE IF (JVIEW .EQ. 3) THEN POSITI = 'X-Z: , ' ENDIF WRITE(POSITI (5:13),xyform) XLC WRITE(POSITI(15:23),xyform) YLC CALL KTEXT(POSITI,IWS-22,2,15) RETURN END SUBROUTINE DISPOS2(X,Y) USE M_DEVICES implicit none double precision :: x double precision :: y common /dispfor/ xyform, zform, disform character*6 xyform, zform, disform CHARACTER POSITI*23 POSITI = 'X,Y: , ' WRITE(POSITI (5:13),xyform) X WRITE(POSITI(15:23),xyform) Y CALL KTEXT(POSITI,IWS-22,2,15) CALL DISDIS() RETURN END SUBROUTINE DISAREAM(AREAM) use m_devices implicit none double precision :: aream CHARACTER DISTAN*23 DISTAN = 'CR. AR. M M2' WRITE(DISTAN (11:20),'(E10.4)') AREAM CALL KTEXT(DISTAN,IWS-22,6,15) RETURN END SUBROUTINE DISAREAN(AREAN) use m_devices implicit none double precision :: arean CHARACTER DISTAN*23 DISTAN = 'CR. AR. N M2' WRITE(DISTAN (11:20),'(E10.4)') AREAN CALL KTEXT(DISTAN,IWS-22,5,15) RETURN END SUBROUTINE DISDEP2(DEP) use m_devices implicit none double precision :: dep CHARACTER DISTAN*23 DISTAN = 'D2: ' WRITE(DISTAN (5:),'(F8.3)') DEP CALL KTEXT(DISTAN,IWS-22,5,15) RETURN END SUBROUTINE DISCOUR(M,N,DEP) use m_devices implicit none double precision :: dep integer :: m integer :: n CHARACTER DISTAN*23 DISTAN = 'M: N: CRT: ' WRITE(DISTAN (3:5),'(I3)') M WRITE(DISTAN (9:11),'(I3)') N WRITE(DISTAN (17:23),'(F7.2)') DEP CALL KTEXT(DISTAN,IWS-22,4,15) RETURN END SUBROUTINE DISVAL(M,N,DEP) use m_devices implicit none double precision :: dep integer :: m integer :: n integer :: ndraw COMMON /DRAWTHIS/ NDRAW(40) CHARACTER DISTAN*23 IF (NDRAW(14) .LE. 1) THEN DISTAN = 'M: N: ' ELSE IF (NDRAW(14) .EQ. 2) THEN DISTAN = 'M: N: ZC: ' ELSE IF (NDRAW(14) .EQ. 3) THEN DISTAN = 'M: N: RES: ' ELSE IF (NDRAW(14) .EQ. 4) THEN DISTAN = 'M: N: MSM: ' ELSE IF (NDRAW(14) .EQ. 5) THEN DISTAN = 'M: N: NSM: ' ELSE IF (NDRAW(14) .EQ. 6) THEN DISTAN = 'M: N: MCU: ' ELSE IF (NDRAW(14) .EQ. 7) THEN DISTAN = 'M: N: NCU: ' ELSE IF (NDRAW(14) .EQ. 8) THEN DISTAN = 'M: N: MSZ: ' ELSE IF (NDRAW(14) .EQ. 9) THEN DISTAN = 'M: N: NSZ: ' ELSE IF (NDRAW(14) .EQ.10) THEN DISTAN = 'M: N: ASP: ' ELSE IF (NDRAW(14) .EQ.11) THEN DISTAN = 'M: N: ' ELSE IF (NDRAW(14) .EQ.12) THEN DISTAN = 'M: N: DEP: ' ELSE IF (NDRAW(11) .EQ. 1) THEN DISTAN = 'M: N: CNM: ' ELSE IF (NDRAW(11) .EQ. 2) THEN DISTAN = 'M: N: CRM: ' ELSE IF (NDRAW(11) .EQ. 3) THEN DISTAN = 'M: N: CRN: ' ENDIF IF (M .EQ. 0) THEN DISTAN = 'NO POINT FOUND ' ELSE WRITE(DISTAN (3:6),'(I4)') M WRITE(DISTAN (10:13),'(I4)') N IF (NDRAW(14) .GE. 2 .AND. NDRAW(14) .LE. 10) THEN WRITE(DISTAN (16:23),'(F8.3)') DEP ELSE IF (NDRAW(14) .EQ. 11) THEN WRITE(DISTAN (17:23),'(F7.1)') DEP ELSE IF (NDRAW(11) .GE. 1 .AND. NDRAW(11) .LE. 3) THEN WRITE(DISTAN (17:23),'(F7.2)') DEP ENDIF ENDIF CALL KTEXT(DISTAN,IWS-22,4,15) RETURN END SUBROUTINE ORGLOCATOR(XL,YL) use m_devices implicit none integer :: jashow integer :: jmouse integer :: ml integer :: nl double precision :: xa double precision :: xl double precision :: xlc double precision :: ya double precision :: yl double precision :: ylc ! INITIATE CURSOR LOCATION COMMON /LOCATORA/ XLC,YLC,XA,YA,JMOUSE,JASHOW IF (XL .EQ. 0 .AND. YL .EQ. 0) THEN ML = NPX/2 NL = NPY/2 CALL TOWOR(ML,NL,XLC,YLC) ELSE XLC = XL YLC = YL ENDIF CALL IMOUSECURSORXYG(real(XLC),real(YLC)) RETURN END SUBROUTINE WEAREL() use m_wearelt implicit none integer, save :: ini = 0 X1 = XMIN Y1 = YMIN X2 = XMAX CALL SETWY(X1,Y1,X2,Y2) !IF (INI .EQ. 1) THEN CALL INILCA() !ELSE ! INI = 1 !ENDIF RETURN END SUBROUTINE INILCA() implicit none integer :: jashow integer :: jmouse double precision :: xa double precision :: xla double precision :: xlb double precision :: xlc double precision :: ya double precision :: ylc COMMON /LOCATORA/ XLC,YLC,XA,YA,JMOUSE,JASHOW XLA = 0 XLB = 0 ! CALL ORGLOCATOR(XLA,XLB) XLA = 0 XLB = 0 CALL ANCHOR(XLA,XLB) RETURN END SUBROUTINE TEKHOOK(XP,YP) use m_sferic implicit none double precision :: dx double precision :: dy integer :: jashow integer :: jmouse double precision :: xa double precision :: xlc double precision :: xp double precision :: ya double precision :: ylc double precision :: yp COMMON /LOCATORA/ XLC,YLC,XA,YA,JMOUSE,JASHOW DX = XA - XP DY = YA - YP CALL MOVABS(XA,YA) CALL LNABS(XP-DX,YP-DY) CALL MOVABS(XP+DY,YP-DX) CALL LNABS(XP-DY,YP+DX) RETURN END SUBROUTINE ANCHOR(X,Y) use unstruc_colors use m_flow, only: nplot implicit none integer :: jashow integer :: jmouse integer :: ma integer :: na integer :: k double precision :: x double precision :: xa double precision :: xlc double precision :: y double precision :: ya double precision :: ylc ! VEEG OUDE CROSS UIT EN ZET NIEUWE COMMON /LOCATORA/ XLC,YLC,XA,YA,JMOUSE,JASHOW IF (X .EQ. 0 .AND. Y .EQ. 0) THEN MA = 25 NA = 40 CALL TOWOR(MA,NA,XA,YA) ELSE CALL SETXOR(1) CALL SETCOL(KLANK) CALL IGrMARKER(real(XA),real(YA),2) CALL SETXOR(0) XA = X YA = Y ENDIF call inflowcell(XA,YA,k) ! Use anchor for new nplot point (vertical profile) if (k > 0) nplot = k CALL SETXOR(1) CALL SETCOL(KLANK) CALL IGrMARKER(real(XA),real(YA),2) CALL SETXOR(0) CALL DISDIS() RETURN END SUBROUTINE ANCHORCLS() use unstruc_colors implicit none integer :: jashow integer :: jmouse double precision :: xa double precision :: xlc double precision :: ya double precision :: ylc ! ZET ANCHOR NA CLEARSCREEN COMMON /LOCATORA/ XLC,YLC,XA,YA,JMOUSE,JASHOW CALL SETXOR(1) CALL SETCOL(KLANK) CALL IGrMARKER(real(XA),real(YA),2) CALL SETXOR(0) CALL DISDIS() RETURN END SUBROUTINE GEDULD() implicit none integer :: i integer :: numkey DO 10 I = 1,800 CALL INKEYEVENTIMM(NUMKEY) IF (NUMKEY .NE. 0) RETURN 10 CONTINUE RETURN END SUBROUTINE GEDULD2(JAKNOP) implicit none integer :: i integer :: jaknop integer :: numkey JAKNOP = 0 DO 10 I = 1,160000 CALL INKEYEVENTIMM(NUMKEY) IF (NUMKEY .NE. -999 .AND. NUMKEY .NE. 257) THEN JAKNOP = 1 RETURN ENDIF 10 CONTINUE RETURN END SUBROUTINE HALTESC() implicit none integer :: numkey numkey = 0 do while (numkey .ne. 27) CALL INKEYEVENTIMM(NUMKEY) enddo end SUBROUTINE HALT3(JA) ! left mouse button: 1 ! middle mouse button: 2 ! right mouse button: 3 implicit none integer :: ja integer :: numkey ! kappen met muis JA = 0 CALL INKEYEVENTIMM(NUMKEY) IF (NUMKEY .GE. 251 .AND. NUMKEY .LE. 253) then JA = NUMKEY-251+1 ! call inflush() endif RETURN END SUBROUTINE HALT2(JA) implicit none integer :: ja integer :: numkey ! kappen met muis JA = 0 CALL INKEYEVENTIMM(NUMKEY) IF (NUMKEY .GE. 251 .AND. NUMKEY .LE. 253) then JA = 1 ! call inflush() endif RETURN END SUBROUTINE get_s_key(JA) ! s or left mouse implicit none integer :: ja integer :: numkey ! kappen met muis JA = 0 CALL INKEYEVENTIMM(NUMKEY) IF (NUMKEY == 115 .or. NUMKEY == 115-32 .or. NUMKEY == 251) then JA = 1 call inflush() endif RETURN END SUBROUTINE HALT(JA) implicit none integer, intent(out) :: ja integer :: numkey ! kappen met ALLES JA = 0 CALL INKEYEVENTIMM(NUMKEY) IF (NUMKEY .NE. -999 .AND. NUMKEY .NE. 257 .AND. NUMKEY .NE. 254) JA = 1 RETURN END SUBROUTINE READLOCATOR(X,Y,KEY) use m_wearelt use m_devices use m_partitioninfo implicit none double precision :: dpx double precision, save :: f = 1d0 integer :: ini integer :: jashow integer :: jmouse integer :: key, key_all integer, save :: keyold = 0 real :: xloc, yloc double precision :: x double precision :: xa double precision :: xlc double precision :: y double precision :: ya double precision :: ylc COMMON /LOCATORA/ XLC,YLC,XA,YA,JMOUSE,JASHOW REAL, external :: INFOGRAPHICS DPX = (X2-X1)/NPX CALL IMOUSECURSORSHAPE(1,'G') CALL IMouseCursorShow() INI = KEY 10 CONTINUE IF (NOPSYS .EQ. 1) THEN ! CALL InKeyEventIMM(KEY) CALL InKeyEvent(KEY) ELSE if ( jampi.eq.0 ) then CALL InKeyEvent(KEY) else CALL InKeyEventIMM(KEY) ! reduce key ! call reduce_key(key) end if ENDIF IF (KEY .EQ. -999) THEN ! er gebeurt helemaal niets GOTO 10 ! ELSE IF (KEY .GE. 128 .AND. KEY .LE. 131) THEN ! pijltjesbeweging IF (KEYOLD .NE. KEY) THEN F = 1 ENDIF KEYOLD = KEY F = F*1.08d0 F = MIN(F,10d0) IF (KEY .EQ. 128) THEN YLC = YLC + DPX*F ELSE IF (KEY .EQ. 129) THEN YLC = YLC - DPX*F ELSE IF (KEY .EQ. 130) THEN XLC = XLC + DPX*F ELSE IF (KEY .EQ. 131) THEN XLC = XLC - DPX*F ENDIF CALL IMOUSECURSORXYG(real(XLC),real(YLC)) X = XLC Y = YLC IF (INI .EQ. 999) THEN KEY = -10 CALL IMOUSECURSORHIDE() CALL GIVEKEY(KEY) RETURN ENDIF ENDIF ! muisbeweging Xloc = InfoGraphics(5) Yloc = InfoGraphics(6) X=dble(xloc) y=dble(yloc) y = min(max(y, y1), y2) ! buiten veld? IF (INI .NE. 999) THEN IF (Y .GT. Y1 + 0.98d0*(Y2-Y1) ) THEN KEY = 1 CALL IMOUSECURSORSHAPE(0,'G') RETURN ELSE IF (Y .LT. Y1 + 0.02d0*(Y2-Y1) ) THEN KEY = 2 CALL IMOUSECURSORSHAPE(0,'G') RETURN ENDIF ENDIF XLC = X YLC = Y IF (INI .EQ. 999) THEN IF (KEY .GE. 254 .AND. KEY .LE. 257) THEN ! zo snel mogelijk lopen, geen keys of display KEY = -10 RETURN ELSE CALL DISPOS() CALL DISDIS() CALL GETKEY2(KEY) CALL GIVEKEY(KEY) CALL IMOUSECURSORHIDE() RETURN ENDIF ELSE CALL DISPOS() CALL DISDIS() IF ( (KEY .GE. 254 .AND. KEY .LE. 257) .OR. & (KEY .GE. 128 .AND. KEY .LE. 131) ) THEN ! IF (KEY .EQ. 257 .OR. KEY .GE. 128 .AND. KEY .LE. 131) THEN ! zo snel mogelijk lopen GOTO 10 ELSE CALL GETKEY2(KEY) CALL GIVEKEY(KEY) CALL TIMLIN() CALL IMOUSECURSORHIDE() ENDIF ENDIF RETURN END SUBROUTINE KTEXT(TEXNU,NX,NY,NCOL) implicit none integer :: ncol integer :: nx integer :: ny ! tekst op normale text posities met standaard blauwe achtergrond CHARACTER* (*) TEXNU CALL ITEXTCOLOURN(NCOL,5) CALL IOUTSTRINGXY(NX,NY,trim(TEXNU)) RETURN END SUBROUTINE KTEXT2(TEX,NX,NY,NCOL,NCOL2) implicit none integer :: ncol integer :: ncol2 integer :: nx integer :: ny ! tekst op normale text posities met EIGEN achtergrond CHARACTER* (*) TEX CALL ITEXTCOLOURN(NCOL,NCOL2) CALL IOUTSTRINGXY(NX,NY,trim(TEX)) RETURN END SUBROUTINE LTEXT(TEX,NX,NY,NCOL) use unstruc_colors implicit none integer :: ncol integer :: ndraw integer :: nx integer :: ny double precision :: x double precision :: y ! grafische tekst op normale text posities CHARACTER TEX*(*) COMMON /DRAWTHIS/ NDRAW(40) X = X1 + (X2-X1)*dble(NX)/dble(IWS) Y = Y2 + (Y1-Y2)*dble(NY)/dble(IHS) IF (NDRAW(10) .EQ. 1) THEN CALL SETCOL(1) ELSE CALL SETCOL(KLTEX) ENDIF CALL DRAWTEXT(real(X),real(Y),TEX) RETURN END SUBROUTINE ITEXT(TEX,NX,NY) use unstruc_colors implicit none integer :: l integer :: nx integer :: ny double precision :: x double precision :: y ! grafische tekst op normale text posities CHARACTER TEX*(*) X = X1 + (X2-X1)*dble(NX)/dble(IWS) Y = Y2 + (Y1-Y2)*dble(NY)/dble(IHS) CALL SETCOL(KLTEX) L = len_trim(TEX) CALL DRAWTEXT(real(X),real(Y),TEX(1:L)) RETURN END SUBROUTINE ICTEXT(TEX,NX,NY,NCOL) use unstruc_colors implicit none integer :: l integer :: ncol integer :: nx integer :: ny double precision :: x double precision :: y ! grafische tekst op normale text posities CHARACTER TEX*(*) X = X1 + (X2-X1)*dble(NX)/dble(IWS) Y = Y2 + (Y1-Y2)*dble(NY)/dble(IHS) CALL SETCOL(NCOL) L = len_trim(TEX) CALL DRAWTEXT(real(X),real(Y),TEX(1:L)) RETURN END SUBROUTINE DGTEXT(TEX,XD,YD,ZD,NCOL) implicit none integer :: ncol double precision :: x double precision :: y double precision :: z CHARACTER TEX*(*) DOUBLE PRECISION XD,YD,ZD CALL DRIETWEE(XD,YD,ZD,X,Y,Z) CALL GTEXT(TEX,X,Y,NCOL) RETURN END SUBROUTINE GTEXT(TEX,X,Y,NCOL) implicit none integer :: ncol integer :: ncolnow double precision :: x double precision :: y COMMON /COLNOW/ NCOLNOW ! grafische text op grafische posities CHARACTER TEX*(*) CALL SETCOL(NCOL) IF (NCOLNOW .GE. 0) THEN CALL DRAWTEXT(real(X),real(Y),TEX) ENDIF RETURN END SUBROUTINE DRAWTEXT(X,Y,TEX) use unstruc_opengl implicit none real :: x, y CHARACTER TEX*(*) IF (InOpenGLRendering) THEN CALL RenderText(X,Y,TEX) ELSE CALL IGRCHAROUT(X,Y,TEX) ENDIF END SUBROUTINE SUBROUTINE DHTEXT(VAL,XD,YD,ZD) implicit none double precision :: val double precision :: x double precision :: y double precision :: z DOUBLE PRECISION XD,YD,ZD CALL DRIETWEE(XD,YD,ZD,X,Y,Z) CALL HTEXT(VAL,X,Y) RETURN END SUBROUTINE HTEXT(VAL,X,Y) implicit none integer :: ncolnow double precision :: val double precision :: x double precision :: y ! getal value op grafisch scherm in current color CHARACTER TEXT*6, TEXT2*10 COMMON /COLNOW/ NCOLNOW IF (NCOLNOW .GE. 0) THEN IF (-1.000d0 .LT. VAL .AND. VAL .LT. 10.000d0) THEN WRITE(TEXT(1:6),'(F6.3)') VAL CALL DRAWTEXT(real(X),real(Y), TEXT) ELSE IF (-10.000d0 .LT. VAL .AND. VAL .LT. 100.000d0) THEN WRITE(TEXT(1:6),'(F6.2)') VAL CALL DRAWTEXT(real(X),real(Y), TEXT) ELSE IF (-100.000d0 .LT. VAL .AND. VAL .LT. 1000.000d0) THEN WRITE(TEXT(1:6),'(F6.1)') VAL CALL DRAWTEXT(real(X),real(Y), TEXT) else WRITE(TEXT2,'(e10.3)') VAL CALL DRAWTEXT(real(X),real(Y), TEXT2) ENDIF ENDIF RETURN END SUBROUTINE DHITEXT(IVAL,XD,YD,ZD) implicit none integer :: ival double precision :: x double precision :: y double precision :: z DOUBLE PRECISION XD,YD,ZD CALL DRIETWEE(XD,YD,ZD,X,Y,Z) CALL HITEXT(IVAL,X,Y) RETURN END SUBROUTINE HITEXT(IVAL,X,Y) implicit none integer :: ival integer :: l integer :: ncolnow double precision :: x double precision :: y ! INTEGER grafisch scherm in current color CHARACTER TEX*8 COMMON /COLNOW/ NCOLNOW IF (NCOLNOW .GE. 0) THEN IF (IVAL < 100) THEN WRITE(TEX,'(I2)') IVAL ELSE IF (IVAL < 10000) THEN WRITE(TEX,'(I4)') IVAL ELSE WRITE(TEX,'(I8)') IVAL ENDIF L = len_trim(TEX) CALL DRAWTEXT(real(X),real(Y), TEX(1:L)) ENDIF RETURN END SUBROUTINE ZOOM2(KEY) use m_wearelt implicit none double precision :: aspect double precision :: dsixn double precision :: dxh double precision :: dyh integer :: jashow integer :: jmouse integer :: key double precision :: x1b double precision :: x2b double precision :: xa double precision :: xl double precision :: xlc double precision :: xln double precision :: y1b double precision :: y2b double precision :: ya double precision :: yl double precision :: ylc double precision :: yln COMMON /LOCATORA/ XLC,YLC,XA,YA,JMOUSE,JASHOW ! ALLEEN ENTRY BIJ KEY = 90 (Z BIJ CAPS LOCK ON !) ! EN NIET ALS NET BEZIG PUNT TE ZETTEN ! BIJ VERLATEN MET KEY = 3, TEKEN OPNIEUW CALL INQASP(ASPECT) DXH = (X2 - X1) DYH = DXH*ASPECT DSIXN = DSIX XL = (X1+X2)/2 YL = (Y1+Y2)/2 X1B = XL - DSIXN X2B = XL + DSIXN Y1B = YL - DSIXN*ASPECT Y2B = YL + DSIXN*ASPECT X1 = X1B Y1 = Y1B X2 = X2B CALL SETWY(X1,Y1,X2,Y2) XLN = 0d0 YLN = 0d0 CALL ORGLOCATOR(XLN,YLN) KEY = 3 RETURN END SUBROUTINE ZOOM3(KEY,NPUT) use m_wearelt implicit none integer :: jashow integer :: jmouse integer :: key integer :: nput double precision :: xa double precision :: xlc double precision :: ya double precision :: ylc COMMON /LOCATORA/ XLC,YLC,XA,YA,JMOUSE,JASHOW XLC = (X1+X2)/2 YLC = (Y1+Y2)/2 CALL IMOUSECURSORXYG(real(XLC),real(YLC)) CALL ZOOMIN(KEY,NPUT) RETURN END SUBROUTINE ZOOMIN(KEY,NPUT) use unstruc_colors implicit none double precision :: aspect double precision :: dsixn double precision :: dxh double precision :: dyh integer :: ja integer :: jadraw integer :: jashow integer :: jmouse integer :: k integer :: key integer :: maxzoom integer :: nlevel integer :: nnn integer :: nput integer, save :: numzoom = 0 double precision :: x1b double precision :: x2b double precision :: xa double precision :: xl double precision :: xlc double precision :: xln double precision :: y1b double precision :: y2b double precision :: ya double precision :: yl double precision :: ylc double precision :: yln integer :: ndraw COMMON /DRAWTHIS/ NDRAW(40) COMMON /LOCATORA/ XLC,YLC,XA,YA,JMOUSE,JASHOW CHARACTER WRDKEY*40 PARAMETER (MAXZOOM = 4) double precision, save :: XYWOLD(MAXZOOM,4) IF (NUMZOOM .EQ. 0) THEN DO 5 K = 1,MAXZOOM XYWOLD(K,1) = XMIN XYWOLD(K,2) = YMIN XYWOLD(K,3) = XMAX XYWOLD(K,4) = YMAX 5 CONTINUE NUMZOOM = 1 ENDIF ! geen entry ALS NET BEZIG PUNT TE ZETTEN ! BIJ VERLATEN MET KEY = 3, TEKEN OPNIEUW WRDKEY = 'Z = ZOOMIN ;' NLEVEL = 3 JADRAW = 1 ndraw(1) = 1 ! set cls on IF (NPUT .EQ. 1) RETURN CALL LINEWIDTH(2) CALL SETCOL(KLZM) CALL SETXOR(1) CALL BOTLIN(0,5,NNN) CALL INQASP(ASPECT) DXH = (X2 - X1) DYH = DXH*ASPECT DSIXN = DSIX XL = XLC YL = YLC X1B = XL - DSIXN X2B = XL + DSIXN Y1B = YL - DSIXN*ASPECT Y2B = YL + DSIXN*ASPECT 10 CONTINUE IF (JADRAW .EQ. 1) THEN CALL BOX(X1B,Y1B,X2B,Y2B) JADRAW = 0 ENDIF JA = 0 KEY = 999 CALL READLOCATOR(XL,YL,KEY) IF (X2B .GT. X2 .OR. X1B .LT. X1 .OR. Y2B .GT. Y2 .OR. Y1B .LT. Y1 ) THEN X1 = XL - DXH/2 Y1 = YL - DYH/2 JA = 1 ELSE IF (KEY .EQ. 21) THEN X1 = X1B Y1 = Y1B DXH = MAX((X2B - X1B),1.0D-3) JA = 1 ELSE IF (KEY .EQ. 22) THEN X1 = XMIN Y1 = YMIN DXH = XMAX - XMIN JA = 3 ELSE IF (KEY .EQ. 90 .OR. KEY .EQ. 90+32) THEN DXH = 3*DXH DYH = 3*DYH X1 = XL - DXH/2 Y1 = YL - DYH/2 JA = 1 ELSE IF (KEY .EQ. 23) THEN KEY = 3 CALL SETXOR(0) CALL LINEWIDTH(1) CALL IMOUSECURSORHIDE() RETURN ELSE IF (KEY .EQ. 24) THEN ! F1 NLEVEL = 3 CALL HELP(WRDKEY,NLEVEL) ELSE IF (KEY .EQ. 25) THEN ! F2 CALL HISTOR() ELSE IF (KEY .EQ. 162 .OR. KEY .EQ. 160 .OR. KEY .EQ. 45 .OR. & KEY .EQ. 43 .OR. KEY .LT. 0 ) THEN CALL BOX(X1B,Y1B,X2B,Y2B) JADRAW = 1 IF (KEY .EQ. 162 .OR. KEY .EQ. 43) THEN DSIXN = DSIXN + RCIR/2 ELSE IF (KEY .EQ. 160 .OR. KEY .EQ. 45) THEN DSIXN = MAX(RCIR,DSIXN - RCIR/2) ENDIF X1B = XL - DSIXN X2B = XL + DSIXN Y1B = YL - DSIXN*ASPECT Y2B = YL + DSIXN*ASPECT ELSE IF (KEY .EQ. 143) THEN NUMZOOM = NUMZOOM - 1 IF (NUMZOOM .EQ. 0) NUMZOOM = MAXZOOM X1 = XYWOLD(NUMZOOM,1) Y1 = XYWOLD(NUMZOOM,2) DXH = XYWOLD(NUMZOOM,3) - XYWOLD(NUMZOOM,1) JA = 2 ENDIF IF (JA .GE. 1) THEN CALL IMOUSECURSORHIDE() X2 = X1 + DXH CALL SETWY(X1,Y1,X2,Y2) IF ( JA .NE. 2) THEN ! alleen opslaan als in of uitgezoomd, niet als teruggezoomd NUMZOOM = NUMZOOM + 1 IF (NUMZOOM .EQ. MAXZOOM+1) NUMZOOM = 1 XYWOLD(NUMZOOM,1) = X1 XYWOLD(NUMZOOM,2) = Y1 XYWOLD(NUMZOOM,3) = X2 XYWOLD(NUMZOOM,4) = Y2 ENDIF XLN = 0d0 YLN = 0d0 CALL ORGLOCATOR(XLN,YLN) KEY = 3 CALL LINEWIDTH(1) CALL SETXOR(0) RETURN ENDIF GOTO 10 END SUBROUTINE XYDISFORMAT () use m_sferic USE M_WEARELT implicit none double precision :: dv integer :: ix integer :: ixmax integer :: ixmin integer :: ixy integer :: iy integer :: iymax integer :: iymin integer :: izmax integer :: izmin integer :: jaauto, JMOUSE,JASHOW integer :: ncols integer :: ndec integer :: nie integer :: nis integer :: nv integer :: nxy integer :: nz double precision :: val double precision :: vmax, XLC,YLC,XA,YA double precision :: vmin double precision :: dlen, dbdistance COMMON /DEPMAX/ VMAX,VMIN,DV,VAL(256),NCOLS(256),NV,NIS,NIE,JAAUTO COMMON /DISPFOR/ XYFORM, ZFORM, DISFORM CHARACTER*6 XYFORM, ZFORM, DISFORM COMMON /LOCATORA/ XLC,YLC,XA,YA,JMOUSE,JASHOW ZFORM = '(F7.1)' xlc = max(x1, min(x2, xlc) ) ylc = max(y1, min(y2, ylc) ) IXMIN = INT(LOG10(MAX(1d-6,ABS(X1)))) IXMAX = INT(LOG10(MAX(1d-6,ABS(X2)))) IYMIN = INT(LOG10(MAX(1d-6,ABS(Y1)))) IYMAX = INT(LOG10(MAX(1d-6,ABS(Y2)))) IZMIN = INT(LOG10(MAX(1d0,ABS(VMIN)))) IZMAX = INT(LOG10(MAX(1d0,ABS(VMAX)))) IX = MAX (IXMIN, IXMAX) IY = MAX (IYMIN, IYMAX) IXY = MAX (IX, IY ) ! ------------------- ! 1 VOOR +- ! 1 VOOR . ! 1 VOOR LOG(100) = 2 ! ------------------- NXY = IXY + 3 NDEC = 9 - NXY IF (NDEC .GE. 0) THEN XYFORM = '(F9.1)' WRITE ( XYFORM(5:5),'(I1)') NDEC ELSE XYFORM = '(E9.3)' ENDIF !if (jsferic == 1) then ! nou ja, laat maar even staan ! dlen = DbdISTANCE( X1,Y1,X2,Y2) ! Ixy = INT(LOG10(MAX(1d0,dlen ) ) ) ! NXY = IXY + 3 ! NDEC = 9 - NXY ! IF (NDEC .GE. 1) THEN ! disFORM = '(F9.1)' ! WRITE ( disform(5:5),'(I1)') NDEC ! ELSE ! disFORM = '(E9.3)' ! ENDIF !endif ! DISFORM='F17.5' NZ = IZMAX + 3 WRITE ( ZFORM(5:5),'(I1)') max(0, 9 - NZ) RETURN END SUBROUTINE CHEKHW() implicit none integer :: infogrscreen integer :: key ! check the hardware in use - must have graphics LOGICAL NOGRAF NOGRAF = InfoGrScreen(1).EQ.0 IF (NOGRAF) THEN CALL IOutError('Sorry, this program requires a display ' & //'with graphics capability - Press a key') CALL InKeyEvent(KEY) ! exit tidily, clearing the screen CALL IScreenQuit('C') ENDIF RETURN END SUBROUTINE INIKEYS() use m_devices implicit none integer :: i integer :: nkey integer :: numc integer :: numkeys COMMON /NKEYS/ NUMKEYS, NKEY(20), NUMC(20) ! Keyboard NKEY( 1) = 142 NKEY( 2) = 166 NKEY( 3) = 13 NKEY( 4) = 27 NKEY( 5) = 171 NKEY( 6) = 172 NKEY( 7) = 173 NKEY( 8) = 9 IF (NOPSYS .GT. 1) THEN NKEY(9) = 259 ELSE NKEY(9) = NKEY(8) ENDIF ! Muistoetsen NKEY(10) = 251 NKEY(11) = 252 NKEY(12) = 253 NUMC( 1) = 21 NUMC( 2) = 22 NUMC( 3) = 22 NUMC( 4) = 23 NUMC( 5) = 24 NUMC( 6) = 25 NUMC( 7) = 26 NUMC( 8) = 27 IF (NOPSYS .GT. 1) THEN NUMC(9) = 50 ELSE NUMC(9) = NUMC(8) ENDIF NUMC(10) = 21 NUMC(11) = 22 NUMC(12) = 22 NUMKEYS = 9 DO 10 I = 1,NUMKEYS CALL INCONTROLKEY(NUMC(I),NKEY(I)) 10 CONTINUE NUMKEYS = 12 ! INS CONFIRM CALL INConTRoLkey(21, 142) ! ENTER CONFIRM CALL INConTRoLkey(22, 13) ! ENTER KEYPAD CONFIRM CALL INConTRoLkey(22, 166) ! ESC CALL INConTRoLkey(23, 27) ! F1 HELP CALL INConTRoLkey(24, 171) ! F2 HISTORY CALL INConTRoLkey(25, 172) ! F3 COMMAND CALL INConTRoLkey(26, 173) ! TAB SWITCH TUSSEN 3 SCHERMEN CALL INConTRoLkey(27, 9) ! EXPOSE RESIZE CALL INCONTROLKEY(50, 259) RETURN END SUBROUTINE TEKADMIN(X,Y,I,J) implicit none integer :: i integer :: j integer :: l double precision :: x double precision :: y CHARACTER TEX*11 IF (I .LE. 9) THEN WRITE(TEX(1:1) ,'(I1)') I L = 2 ELSE IF (I .LE. 99) THEN WRITE(TEX(1:2) ,'(I2)') I L = 3 ELSE IF (I .LE. 999) THEN WRITE(TEX(1:3) ,'(I3)') I L = 4 ELSE WRITE(TEX(1:4) ,'(I4)') I L = 5 ENDIF WRITE(TEX(L:L),'(A)') ',' IF (J .LE. 9) THEN WRITE(TEX(L+1:L+1) ,'(I1)') J L = L + 1 ELSE IF (J .LE. 99) THEN WRITE(TEX(L+1:L+2) ,'(I2)') J L = L + 2 ELSE IF (J .LE. 999) THEN WRITE(TEX(L+1:L+3) ,'(I3)') J L = L + 3 ELSE WRITE(TEX(L+1:L+4) ,'(I4)') J L = L + 4 ENDIF CALL DRAWTEXT(real(X),real(Y), TEX(1:L)) RETURN END subroutine DISDEP (m,n,dep) use m_devices implicit none double precision :: dep integer :: m integer :: n character distan*23 character fmt*6 DISTAN = 'M: N: D: ' WRITE(DISTAN (3:5),'(I3)') M WRITE(DISTAN (9:11),'(I3)') N fmt = '(f9.3)' call dispform (dep, fmt) WRITE(DISTAN (15:23),fmt) DEP CALL KTEXT(DISTAN,IWS-22,4,15) RETURN END SUBROUTINE DISPNODE (MP) use m_devices use m_netw, only : zk implicit none integer :: mp CHARACTER TEX*23 IF (MP .LE. 0) THEN TEX = 'NODE NOT FOUND ' CALL KTEXT(TEX,IWS-22,4,15) ELSE TEX = 'NODE NR: ' WRITE(TEX (10:),'(I10)') MP CALL KTEXT(TEX,IWS-22,4,15) ! TEX = 'ZK Lev : (m)' ! WRITE(TEX (10:18),'(F9.3)') zk(mp) ! CALL KTEXT(TEX,IWS-22,5,15) ENDIF RETURN END SUBROUTINE DISPNODE2 (MP, NP) use m_grid, only : zc use m_devices implicit none integer :: mp, np CHARACTER TEX*23 IF (MP .LE. 0) THEN TEX = 'NODE NOT FOUND ' CALL KTEXT(TEX,IWS-22,4,15) ELSE TEX = 'NODE NR: ' WRITE(TEX (10:),'(I4,A1,I4)') MP, ',', NP CALL KTEXT(TEX,IWS-22,4,15) ! TEX = 'ZC Lev : (m)' ! WRITE(TEX (10:18),'(F9.3)') zc(mp,np) ! CALL KTEXT(TEX,IWS-22,5,15) ENDIF RETURN END SUBROUTINE DISLINK (MP) use m_devices implicit none integer :: mp CHARACTER TEX*23 IF (MP .LE. 0) THEN TEX = 'LINK NOT FOUND ' ELSE TEX = 'LINK NR: ' WRITE(TEX (10:),'(I10)') MP ENDIF CALL KTEXT(TEX,IWS-22,4,15) RETURN END SUBROUTINE DISDIS() use m_devices implicit none double precision :: dbdistance double precision :: dis integer :: jashow integer :: jmouse double precision :: xa double precision :: xlc double precision :: ya double precision :: ylc ! ------------------------------- ! write distance ! ------------------------------- COMMON /LOCATORA/ XLC,YLC,XA,YA,JMOUSE,JASHOW common /dispfor/ xyform, zform, disform character*6 xyform, zform, disform CHARACTER DISTAN*24 DISTAN = 'DIS:' DIS = dbdistance(xa,ya,xlc,ylc) WRITE(DISTAN(6:),'(F17.5)') min(DIS,1d9) CALL KTEXT(DISTAN,IWS-22,3,15) ! checkdislin() RETURN END ! ------------------------------------------------------------------- SUBROUTINE FULLSCREEN() CALL viewport(0.0,0.0,1.0,1.0) RETURN END subroutine viewport(xs1, ys1, xs2, ys2) use unstruc_opengl implicit none real xs1, ys1, xs2, ys2 IF (InOpenGLRendering) THEN #ifdef HAVE_OPENGL ! screen coordinates extend CALL fglViewPort(int(xs1*currentWidth), int(ys1*currentHeight), int((xs2-xs1)*currentWidth), int((ys2-ys1)*currentHeight) ) #endif else call igrarea(xs1, ys1, xs2, ys2) endif end SUBROUTINE SMALLSCREEN() implicit none integer :: jaxis double precision :: xleft double precision :: xright double precision :: ybot double precision :: ytop COMMON /SCREENAREA/ XLEFT,YBOT,JAXIS YTOP = MAX(0.95d0,1 - YBOT) XRIGHT = MAX(0.90d0,1 - XLEFT) call viewport(real(XLEFT),real(YBOT),real(XRIGHT),real(YTOP)) ! call IPGAREA(real(XLEFT),real(YBOT),real(XRIGHT),real(YTOP)) RETURN END SUBROUTINE TXTLINES() use m_devices use m_textlines implicit none integer :: i CALL IGRCHARSIZE(real(TXSIZE),real(TXSIZE)) do i = 1,3 if (len_trim(TXLIN(i)) > 0) then CALL MTEXT(TXLIN(i), TXXpos, TXYpos+0.04d0*(4-i), 3) endif enddo CALL SETTEXTSIZE() RETURN END SUBROUTINE TXTTIM() use m_devices implicit none integer :: l double precision :: txtimsize double precision :: txtimx double precision :: txtimy COMMON /TEXTIM/ TXTIMSIZE, TXTIMX, TXTIMY, TXTIM CHARACTER TXTIM*60 L = len_trim(TXTIM) IF (L .EQ. 0) RETURN CALL IGRCHARSIZE(real(TXTIMSIZE),real(TXTIMSIZE)) CALL IGRCHARFONT(3) CALL MTEXT(TXTIM,TXTIMX,TXTIMY,35) CALL IGRCHARFONT(1) CALL SETTEXTSIZE() RETURN END SUBROUTINE MTEXT(TEX,X,Y,NCOL) use unstruc_colors implicit none double precision :: heigth integer :: l integer :: ncol double precision :: w1 double precision :: width double precision :: x double precision :: xt double precision :: y double precision :: yt ! grafische text op RELATIEVE grafische posities + achtergrondje REAL INFOGRAPHICS, IGRCHARLENGTH CHARACTER TEX*(*) L = len_trim(TEX) WIDTH = IGRCHARLENGTH(TEX(1:L))*INFOGRAPHICS(3) W1 = IGRCHARLENGTH(TEX(1:1))*INFOGRAPHICS(3) HEIGTH = INFOGRAPHICS(4) XT = X1 + X*(X2-X1) YT = Y1 + Y*(Y2-Y1) CALL SETCOL(KLSCL) CALL FBOX(XT-WIDTH/2,YT-HEIGTH/2,XT+WIDTH/2+w1/2,YT+HEIGTH/2) CALL SETCOL(NCOL) CALL BOX (XT-WIDTH/2,YT-HEIGTH/2,XT+WIDTH/2+w1/2,YT+HEIGTH/2) CALL DRAWTEXT(real(XT+W1/2-WIDTH/2),real(YT),TEX) RETURN END SUBROUTINE SETTEXTSIZE() use unstruc_opengl implicit none double precision :: tsize COMMON /TEXTSIZE/ TSIZE IF (InOpenGLRendering) THEN CALL SetTextHeight(int(FontSize*TSIZE)) ELSE CALL IGRCHARSIZE(real(TSIZE),real(TSIZE)) ENDIF END SUBROUTINE SETTEXTSIZEFAC(T) use unstruc_opengl implicit none double precision :: tsize,t COMMON /TEXTSIZE/ TSIZE IF (InOpenGLRendering) THEN CALL SetTextHeight(int(FontSize*T*TSIZE)) ELSE CALL IGRCHARSIZE(real(T*TSIZE),real(T*TSIZE)) ENDIF END SUBROUTINE AXES() use unstruc_colors implicit none integer :: jaxis double precision :: xleft double precision :: ybot COMMON /SCREENAREA/ XLEFT,YBOT,JAXIS IF (JAXIS .EQ. 1) THEN CALL SETCOL(KLAXS) CALL viewport(0.0,0.0,1.0,1.0) CALL IPGBORDER() CALL IPGXTICKPOS(Y1,Y2) CALL IPGXSCALE ('TN') CALL IPGXSCALETOP ('TN') CALL IPGYTICKPOS(X1,X2) CALL IPGYSCALELEFT ('TN') CALL IPGYSCALERIGHT('TN') CALL SMALLSCREEN() ENDIF RETURN END SUBROUTINE NEWWORLD() use m_wearelt implicit none double precision :: asp integer :: jaxis double precision :: xleft double precision :: xright double precision :: xw double precision :: ybot double precision :: yc double precision :: ytop double precision :: ywn COMMON /SCREENAREA/ XLEFT,YBOT,JAXIS CALL INQASP(ASP) YTOP = MAX(0.95d0,1 - YBOT) XRIGHT = MAX(0.90d0,1 - XLEFT) YC = (Y1+Y2)/2 XW = X2-X1 YWN = XW*ASP Y1 = YC - YWN/2 Y2 = YC + YWN/2 CALL SETWY(X1,Y1,X2,Y2) YC = (YMAX+YMIN)/2 XW = XMAX-XMIN YWN = XW*ASP YMIN = YC - YWN/2 YMAX = YC + YWN/2 RETURN END SUBROUTINE VECSCALE_DFLOWFM(VFAC2) USE M_WEARELT implicit none double precision :: heightline integer :: ihcopts integer :: klscl integer :: ndec integer :: ndraw integer :: nhcdev integer :: numhcopts double precision :: vfac2 double precision :: xp1 double precision :: xsc double precision :: xsc1 double precision :: xsc2 double precision :: yp1 double precision :: yp2 double precision :: ysc double precision :: ysc1 double precision :: ysc2 real :: rx, ry double precision :: scalesize ! tekenen legenda COMMON /HARDCOPY/ NHCDEV,NUMHCOPTS,IHCOPTS(2,20) COMMON /DRAWTHIS/ NDRAW(40) COMMON /SCALEPOS/ XSC,YSC,SCALESIZE,NDEC CHARACTER TEXT2*9 IF (NDRAW(12) .LE. 2) RETURN CALL IGRCHARSIZE(real(SCALESIZE),real(SCALESIZE)) XSC1 = X1 + XSC*(X2-X1) XSC2 = XSC1 + 1.2d0*DSIX/2 YSC2 = Y1 + YSC*(Y2-Y1) - RCIR CALL IGRUNITSFROMPIXELS(1,1,rx, ry) XP1 = dble(rx) YP1 = dble(ry) CALL IGRUNITSFROMPIXELS(1,1+NINT(16*SCALESIZE),rx, ry) YP2 = dble(ry) HEIGHTLINE = 2*(YP2 - YP1) YSC1 = YSC2 - (2d0)*HEIGHTLINE IF (NDRAW(10) .EQ. 0) THEN CALL SETCOL(KLSCL) ELSE IF (NHCDEV .EQ. 2) CALL SETCOL(0) ENDIF call RECTANGLE(real(XSC1),real(YSC1),real(XSC2),real(YSC2)) CALL SETCOL(1) CALL BOX(XSC1,YSC1,XSC2,YSC2) RETURN END SUBROUTINE SETGRAFMOD() use m_devices implicit none integer :: infoscreen integer :: infoscreenmode integer :: mode MODE = INFOSCREEN(1) IWS = INFOSCREEN(2) IHS = INFOSCREEN(3) NPX = INFOSCREEN(4) NPY = INFOSCREEN(5) NCOLR = INFOSCREENMODE(6,MODE) NDEV = MODE ! IF (NOPSYS .EQ. 1) THEN ! ENDIF RETURN END SUBROUTINE INTINI() use m_sferic use unstruc_version_module, only : unstruc_company, unstruc_program, unstruc_version use m_wearelt use m_devices implicit none double precision :: croshrsz integer :: icrhf integer :: infoopsystem integer :: jashow integer :: jaxis integer :: jmouse integer :: jvga integer :: ncolnow integer :: ntxcols integer :: ntxrows integer :: nxpix integer :: nypix double precision :: xa double precision :: xlc double precision :: xleft double precision :: ya double precision :: ybot double precision :: ylc COMMON /INITSCREEN/ CROSHRSZ,JVGA,NXPIX,NYPIX,NTXCOLS,NTXROWS COMMON /SCREENAREA/ XLEFT,YBOT,JAXIS COMMON /COLNOW/ NCOLNOW COMMON /LOCATORA/ XLC,YLC,XA,YA,JMOUSE,JASHOW JSFERIC = 0 CALL ISCREENMODEOPTIONS(1,NTXCOLS) CALL ISCREENMODEOPTIONS(2,NTXROWS) CALL ISCREENMODEOPTIONS(6,1) CALL ISCREENMODEOPTIONS(9,1) NOPSYS = INFOOPSYSTEM(1) NCOLR = 256 IF (NOPSYS .EQ. 1 .AND. JVGA .EQ. 1) THEN NXPIX = 640 NYPIX = 480 NCOLR = 16 ! CALL VGA@() ENDIF CALL ISCREENOPEN(' ','GR',NXPIX,NYPIX,NCOLR) CALL ISCREENTITLE('G',trim(unstruc_company)//'-'//trim(unstruc_program)//' '//trim(unstruc_version)) !CALL ISCREENTITLE('G', PROGNM) CALL SETGRAFMOD() CALL SETCOLORTABLE() CALL INIKEYS() ! CALL INSERTOVER('OVER') ! set size crosshair cursor ICRHF = 1d0/CROSHRSZ CALL IGRINPUTOPTIONS(5,ICRHF) ! CALL InEventSelect(0,0) IF (NOPSYS .EQ. 1) THEN ! Mouse button down, up, move is an event CALL InEventSelect(0,1+2+8) ELSE ! Mouse button down, up, resize an event CALL InEventSelect(0,1+2+32) CALL InEventSelect(0,1+2+8+32) ! Enable processing of expose/resize events CALL InControlKey(50,259) ENDIF ! CALL ICURSOR(' ') ! exit on mouse click outside input area CALL INMOUSEOPTIONS(2,1) ! only BUTTON DOWN CALL INMOUSEOPTIONS(3,0) CALL IFRAMEOPTIONS(6,15) CALL IFRAMEOPTIONS(7,0) ! CALL IFRAMETYPE(9) ! CALL IFORMDEFAULTS(3) CALL SETTEXTSIZE() CALL IGRFILLPATTERN(4,0,0) YBOT = 0d0 XLEFT = 0d0 JAXIS = 0 CALL viewport(0.0,0.0,1.0,1.0) ! CALL IPGAREA(0.0,0.0,1.0,1.0) XMIN = 0d0 XMAX = 1d0 YMIN = 0d0 YMAX = 1d0 X1 = XMIN X2 = XMAX Y1 = YMIN Y2 = YMAX NCOLNOW = 31 XLC = 0 YLC = 0 CALL WEAREL() RETURN END !> Highlights the 'string' field of a user-input form field. !! Input fields are highlighted automatically, but the string label isn't. !! This assumes that string field number is always input field number minus 1. !! Only use this subroutine as the FMUSER argument to IFormEditUser(.., .., FMUSER). subroutine highlight_form_line(ifield, iexitk) implicit none integer, intent(in) :: ifield !< Form field number that lost focus (infoform(3) contains 'next' field). integer, intent(in) :: iexitk !< 'Exit' key that was used to leave this form field. integer :: ifieldnext integer, external :: InfoForm ifieldnext = InfoForm(3) ! Reset the 'current' field back to defaults (no highlights) if (ifield > 1) then call iformattributen(ifield-1, 0, -1, -1) call iformshowfield(ifield-1) end if if (ifieldnext > 1) then call iformattribute(ifieldnext-1, 'UB', ' ', ' ') call iformshowfield(ifieldnext-1) end if end subroutine highlight_form_line SUBROUTINE WAITESC() implicit none integer :: key CALL INFLUSH() 10 CONTINUE CALL INKEYEVENTIMM(KEY) IF (KEY .EQ. 27) RETURN GOTO 10 END SUBROUTINE WAIT() implicit none integer :: key CALL INFLUSH() 10 CONTINUE CALL INKEYEVENTIMM(KEY) IF (KEY .NE. -999 .AND. KEY .NE. -32387) RETURN GOTO 10 END SUBROUTINE WAITSECS(NSEC) implicit none integer :: i integer :: key integer :: nsec CALL INFLUSH() DO 10 I = 1,NSEC CALL IOSWAIT(100) CALL INKEYEVENTIMM(KEY) IF (KEY .NE. -999 .AND. KEY .NE. -32387) RETURN 10 CONTINUE RETURN END SUBROUTINE SETCOLORTABLE() implicit none double precision :: dv, dv2 integer :: i integer :: jaauto, jaauto2 integer :: ncols, ncols2 integer :: nie, nie2 integer :: nis, nis2 integer :: nv, nv2 double precision :: val, val2 double precision :: vmax, vmax2 double precision :: vmin, vmin2 COMMON /DEPMAX/ VMAX,VMIN,DV,VAL(256),NCOLS(256),NV,NIS,NIE,JAAUTO COMMON /DEPMAX2/ VMAX2,VMIN2,DV2,VAL2(256),NCOLS2(256),NV2,NIS2,NIE2,JAAUTO2 NIS = 72 DO I = 1,256 NCOLS(I) = MIN(255,NIS + I-1) enddo NIS2 = 136 DO I = 1,256 NCOLS2(I) = MIN(255,NIS2 + I-1) enddo end SUBROUTINE SETCOLORTABLE SUBROUTINE SETCOL(NCOL) use unstruc_opengl implicit none integer :: ncol integer :: ncolnow COMMON /COLNOW/ NCOLNOW IF (NCOL .NE. NCOLNOW ) THEN CALL IGRCOLOURN(NCOL) CALL SetColorFromColorNr(NCOL) ENDIF NCOLNOW = NCOL RETURN END SUBROUTINE HELP(WRDKEY,NLEVEL) use unstruc_display use unstruc_version_module, only : unstruc_company, unstruc_program implicit none integer :: i integer :: ih integer :: infowindow integer :: iw integer :: ixp integer :: ixs integer :: iyp integer :: iys integer :: japop integer :: jatab integer :: jofnd integer :: len integer :: line integer :: maxhlp integer :: maxkwd integer :: nahead integer :: nback integer :: nforg integer :: nlevel integer :: numchc integer :: numkey integer :: numpag integer :: numpgk integer :: numtop integer :: numtxt integer :: numwnb integer :: numwnh integer :: numwnk integer :: numwnt ! Gives helptext starting from wrdkey in screen with dimensions npos PARAMETER (MAXHLP = 2000, MAXKWD = 400) INTEGER NHTONK(MAXHLP), NKTONH(MAXKWD) CHARACTER HLPTXT(MAXHLP)*80,WRDKEY*40,KEYWRD(MAXKWD)*40,LOOKUP*20,TEXLIN*80 COMMON /HELPC/ HLPTXT,NUMTXT ! ! Initialise CALL IWinWordWrap('OFF') CALL ITEXTCOLOURN(HLPFOR,HLPBCK) CALL INHIGHLIGHT('WHITE','RED') ! IXP = 1 ! IYP = 1 ! IW = IXP + IWS-IW ! IH = INFOSCREEN(3) - 9 IW = NPOS(3) IH = IHS - 9 IXP = NPOS(1) + (IWS-IW)/2 IYP = NPOS(2) - 1 NAHEAD = 1 JATAB = 0 JAPOP = 0 NUMTOP = NUMTXT + 1 NUMCHC = 1 NUMKEY = 0 NUMPAG = 1 + (NUMTXT-IH+1) / IH LOOKUP = WRDKEY ! ! Count the number of keywords in text and make cross references DO 10 I = 1,NUMTXT IF (HLPTXT(I)(1:3) .NE. ' ') THEN NUMKEY = NUMKEY + 1 KEYWRD(NUMKEY) = HLPTXT(I) NKTONH(NUMKEY) = I ENDIF NHTONK(I) = NUMKEY 10 CONTINUE NUMPGK = 1 + (NUMKEY-IH+1) / IH ! ! Header of helpwindow CALL IWinAction('FPC') CALL IWinOpen(IXP,IYP,IW,1) NUMWNT = InfoWindow(1) CALL ITEXTCOLOURN(LBLFOR,LBLBCK) TEXLIN = ' '//trim(unstruc_company)//'-'//trim(unstruc_program)//' HELPWINDOW' CALL IWinOutSTRINGXY(1,1,TEXLIN) CALL IWinOutStringXY (IW-16,1,'page = of ') CALL IWinOutIntegerXY(IW-3,1,NUMPAG,2) ! TEXLIN = ' '//PROGNM// ' HELPWINDOW ! * page = of ' ! CALL IWinOutStringXY(1,1,TEXLIN) ! CALL IWinOutIntegerXY(IW-10,1,NUMPAG,2) ! Explain keyfunctions in bottom window CALL IWinAction('FPC') CALL IWinOpen(IXP,IYP+6+IH,IW,2) NUMWNB = InfoWindow(1) CALL ITEXTCOLOURN(HLPFOR,HLPBCK) CALL IWinOutStringXY (1,1,'pages = PgUp/PgDn; scroll =  ; toggle keyword menu = Tab') CALL IWinOutStringXY (1,2,'top or bottom = Home/End; exit = Esc; search = F7') ! ! Helpwindow is middelste window CALL IWinAction('FPC') CALL IWinOpen(IXP,IYP+4,IW,IH) NUMWNH = InfoWindow(1) ! ! Start with keyword WRDKEY CALL SEARCH(NAHEAD,NLEVEL,HLPTXT,NUMTXT,WRDKEY,NUMCHC,JOFND) ! 20 CONTINUE ! ! ! Display one page of help IF (JATAB .EQ. 0) THEN CALL IWinSelect(NUMWNH) CALL SCRLPG(HLPTXT,NUMTXT,NUMTOP,NUMCHC,IH) ELSE CALL IWinSelect(NUMWNK) CALL SCRLPG(KEYWRD,NUMKEY,NUMTOP,NUMCHC,IH) ENDIF ! ! Display pagenumber in top window CALL IWinSelect(NUMWNT) CALL IWinOutIntegerXY(IW-9,1,1+NUMTOP/IH,2) ! ! Indicate present keyword level with cursor position CALL ITextAttribute('BRU') IF (JATAB .EQ. 0) THEN CALL IWinSelect(NUMWNH) CALL IWinOutStringXY (NLEVEL,NUMCHC-NUMTOP+1,HLPTXT(NUMCHC)(NLEVEL:NLEVEL)) ELSE CALL IWinSelect(NUMWNK) CALL IWinOutStringXY (NLEVEL,NUMCHC-NUMTOP+1,KEYWRD(NUMCHC)(NLEVEL:NLEVEL)) ENDIF CALL ITextAttribute(' ') ! ! Get instructions IF (JATAB .EQ. 0) THEN CALL SCROLH(NUMCHC,HLPTXT,NUMTXT,NLEVEL,IH,JOFND,JATAB) ELSE CALL SCROLH(NUMCHC,KEYWRD,NUMKEY,NLEVEL,IH,JOFND,JATAB) ENDIF ! IF (JOFND .EQ. -1) THEN ! Search for keyword IXS = NPOS(1)+46 IYS = NPOS(2)+IH+6 CALL InStringXYDef(IXS,IYS,' => ',0,LOOKUP,LEN) IF (JATAB .EQ. 0) THEN CALL SEARC2(NAHEAD,NLEVEL,HLPTXT,NUMTXT,LOOKUP,NUMCHC,JOFND) ELSE CALL SEARC2(NAHEAD,NLEVEL,KEYWRD,NUMKEY,LOOKUP,NUMCHC,JOFND) ENDIF CALL IWinSelect(NUMWNB) CALL ITEXTCOLOURN(HLPFOR,HLPBCK) CALL IWinOutStringXY (1,2,'top or bottom = Home/End; exit = Esc; search : F7) . ') IF (JATAB .EQ. 1) CALL ITEXTCOLOURN(WNDFOR,WNDBCK) ELSE IF (JATAB .EQ. 1) THEN ! met tab wordt popup keyword window geopend of gesloten IF (JAPOP .EQ. 0) THEN CALL IWinSelect(NUMWNT) CALL ITEXTCOLOURN(LBLFOR,LBLBCK) TEXLIN = ' '//trim(unstruc_company)//'-'//trim(unstruc_program)//' KEYWORDWINDOW' CALL IWinOutSTRINGXY(1,1,TEXLIN) CALL IWinOutStringXY (IW-16,1,'page = of ') CALL IWinOutIntegerXY(IW-3,1,NUMPGK,2) CALL ITEXTCOLOURN(WNDFOR,WNDBCK) CALL IWinAction('PC') CALL IWinOpen(IXP+40,IYP+4,IW-40,IH) NUMWNK = InfoWindow(1) JAPOP = 1 LINE = NUMCHC - NUMTOP NUMCHC = NHTONK(NUMCHC) NUMTOP = MAX( 1,MIN( NUMCHC - LINE,NUMKEY - IH + 1) ) ENDIF ELSE IF (JAPOP .EQ. 1) THEN CALL IWinSelect(NUMWNK) CALL ITEXTCOLOURN(HLPFOR,HLPBCK) CALL IWinClose(1) JAPOP = 0 CALL IWinSelect(NUMWNT) CALL ITEXTCOLOURN(LBLFOR,LBLBCK) TEXLIN = ' '//trim(unstruc_company)//'-'//trim(unstruc_program)//' HELPWINDOW' CALL IWinOutSTRINGXY(1,1,TEXLIN) CALL IWinOutStringXY (IW-16,1,'page = of ') CALL IWinOutIntegerXY(IW-3,1,NUMPAG,2) LINE = NUMCHC - NUMTOP NUMCHC = NKTONH(NUMCHC) NUMTOP = NUMCHC - LINE CALL ITEXTCOLOURN(HLPFOR,HLPBCK) ENDIF ENDIF IF (NUMCHC .NE. 0) GOTO 20 IF (JAPOP .EQ. 1) THEN CALL IWinClose(1) ENDIF CALL IWinClose(1) CALL IWinClose(1) CALL IWinClose(1) CALL ITEXTCOLOURN(NFORG,NBACK) RETURN END SUBROUTINE PAGE(HLPTXT,NUMTXT,NUMTOP,IH) implicit none integer :: i integer :: ih integer :: line integer :: numtop integer :: numtxt ! Display one page, take care, numtop =< numtxt-ih CHARACTER HLPTXT(NUMTXT)*(*) LINE = 0 DO 10 I = NUMTOP,MIN(NUMTOP + IH - 1,NUMTXT) LINE = LINE + 1 CALL IWinOutStringXY(1,LINE,HLPTXT(I)) 10 CONTINUE RETURN END ! SUBROUTINE SCRLPG(HLPTXT,NUMTXT,NUMTOP,NUMCHC,IH) implicit none integer :: ih integer :: numchc integer :: numtop integer :: numtxt ! Display choiceline and one page, take care, numchc <= numtxt CHARACTER HLPTXT(NUMTXT)*(*) ! IF (NUMCHC .LT. NUMTOP) THEN NUMTOP = NUMCHC ELSE IF (NUMCHC .GE. NUMTOP+IH) THEN NUMTOP = NUMCHC - IH + 1 ENDIF ! CALL PAGE(HLPTXT,NUMTXT,NUMTOP,IH) ! RETURN END ! SUBROUTINE SCROLH(NUMCHC,HLPTXT,NUMTXT,NLEVEL,IH,JOFND,JATAB) implicit none integer :: ih integer :: jatab integer :: jofnd integer :: key integer :: nlevel integer :: numchc integer :: numtxt ! Controls NUMCHC, the desired line, 0 means exit ! The value of NUMCHC is checked against limits in this routine ! JOFIND : search, JATAB : keywordwindow CHARACTER HLPTXT(NUMTXT)*(*) ! CALL TIMLIN() CALL InKeyEvent(KEY) CALL TIMLIN() IF (KEY .EQ. 128) THEN CALL NEXT(-1,NLEVEL,NUMCHC,HLPTXT,NUMTXT) ELSE IF (KEY .EQ. 129) THEN CALL NEXT(1,NLEVEL,NUMCHC,HLPTXT,NUMTXT) ELSE IF (KEY .EQ. 130) THEN NLEVEL = MIN(4,NLEVEL + 1) CALL NEXT(1,NLEVEL,NUMCHC,HLPTXT,NUMTXT) ELSE IF (KEY .EQ. 131) THEN NLEVEL = MAX(1,NLEVEL - 1) CALL NEXT(-1,NLEVEL,NUMCHC,HLPTXT,NUMTXT) ELSE IF (KEY .EQ. 132) THEN NUMCHC = MAX(1,NUMCHC - IH) ELSE IF (KEY .EQ. 133) THEN NUMCHC = MIN(NUMTXT,NUMCHC + IH) ELSE IF (KEY .EQ. 140) THEN NUMCHC = 1 ELSE IF (KEY .EQ. 141) THEN NUMCHC = NUMTXT ELSE IF (KEY .EQ. 177) THEN JOFND = -1 ELSE IF (KEY .EQ. 27) THEN NUMCHC = 0 ELSE IF (KEY .EQ. 9) THEN JATAB = 1 - JATAB ENDIF RETURN END SUBROUTINE SEARCH(NAHEAD,NLEVEL,HLPTXT,NUMTXT,WRDKEY,NUMCHC,JOFND) implicit none integer :: jofnd integer :: k integer :: len integer :: nahead integer :: nlevel integer :: numchc integer :: numtxt ! Search at level NLEVEL CHARACTER HLPTXT(NUMTXT)*(*),WRDKEY*40 LEN = len_trim(WRDKEY) IF (LEN .EQ. 0) RETURN JOFND = 0 K = NUMCHC - NAHEAD 10 CONTINUE K = K + NAHEAD IF (K .GT. NUMTXT .OR. K .LT. 1) THEN IF (JOFND .EQ. 0) CALL OKAY(0) RETURN ELSE IF (HLPTXT(K)(NLEVEL:NLEVEL+LEN-1) .NE. WRDKEY) GOTO 10 ENDIF JOFND = 1 NUMCHC = K RETURN END SUBROUTINE SEARC2(NAHEAD,NLEVEL,HLPTXT,NUMTXT,LOOKUP,NUMCHC,JOFND) implicit none integer :: jofnd integer :: k,len integer :: nahead integer :: nlevel integer :: numchc integer :: numtxt ! Search everywhere CHARACTER HLPTXT(NUMTXT)*(*),LOOKUP*20 LEN = len_trim(LOOKUP) IF (LEN .EQ. 0) RETURN JOFND = 0 K = NUMCHC - NAHEAD 10 CONTINUE K = K + NAHEAD IF (K .GT. NUMTXT .OR. K .LT. 1) THEN IF (JOFND .EQ. 0) CALL OKAY(0) RETURN ELSE IF (INDEX(HLPTXT(K),LOOKUP(1:LEN)) .EQ. 0) GOTO 10 ENDIF JOFND = 1 NUMCHC = MIN(NUMTXT,K + 1) RETURN END SUBROUTINE NEXT(NAHEAD,NLEVEL,NUMCHC,HLPTXT,NUMTXT) implicit none integer :: nahead integer :: nlevel integer :: numchc integer :: numtxt ! Searches for previous or next keyword at level nlevel CHARACTER HLPTXT(NUMTXT)*(*) 10 CONTINUE NUMCHC = NUMCHC + NAHEAD IF (NUMCHC .LE. 1) THEN NUMCHC = 1 ELSE IF (NUMCHC .GE. NUMTXT) THEN NUMCHC = NUMTXT ELSE IF (HLPTXT(NUMCHC)(1:NLEVEL) .EQ. ' ') THEN GOTO 10 ENDIF RETURN END SUBROUTINE HELPIN() use unstruc_files implicit none integer :: k integer :: maxhlp integer :: numtxt ! reads NUMTXT lines of HELPTEXT PARAMETER (MAXHLP = 2000) CHARACTER HLPTXT(MAXHLP)*80 COMMON /HELPC/ HLPTXT,NUMTXT NUMTXT = 0 IF (MHLP == 0) RETURN K = 0 10 CONTINUE K = K + 1 READ(MHLP,'(A)',END = 9999) HLPTXT(K) GOTO 10 9999 CONTINUE call doclose(mhlp) NUMTXT = K - 1 RETURN END SUBROUTINE TIMLIN() implicit none CHARACTER TIME*5 ! CALL IOsTime(IH,IM,IS) ! WRITE (TIME,'(I2,1A,I2)') IH,':',IM ! IF (IM .LE. 9) WRITE (TIME(4:4),'(1A)') '0' ! IXP = INFOSCREEN(2) - 4 ! IYP = INFOSCREEN(3) - 1 ! CALL ITEXTCOLOUR('BRED','CYAN') ! CALL IOutStringXY(IXP,IYP,TIME) RETURN END ! Now a double precision (double precision ::) SUBROUTINE GETREAL(TEXT,VALUE) use m_devices USE M_MISSING implicit none integer :: infoattribute integer :: infoinput integer :: ixp integer :: iyp integer :: key integer :: nbckgr integer :: nforgr integer :: nlevel double precision :: val double precision :: value CHARACTER WRDKEY*40, TEXT*(*) COMMON /HELPNOW/ WRDKEY,NLEVEL VAL = VALUE IXP = IWS/2 IYP = IHS/2 NFORGR = InfoAttribute(13) NBCKGR = InfoAttribute(14) CALL INPOPUP('ON') 20 CONTINUE CALL ITEXTCOLOUR('BWHITE','RED') CALL INHIGHLIGHT('BLUE','BWHITE') CALL TIMLIN() ! CALL INDOUBLEXYDEF(IXP,IYP,TEXT,1,VAL,6,'(F6.1)') CALL INDOUBLEXYDEF(IXP,IYP,TEXT,1,VAL,12,'(F12.1)') CALL TIMLIN() KEY = InfoInput(55) IF (KEY .GE. 24 .AND. KEY .LE. 26) THEN NLEVEL = 3 WRDKEY = TEXT CALL FKEYS(KEY) IF (KEY .EQ. 3) THEN CALL INPOPUP('OFF') CALL ITEXTCOLOURN(NFORGR,NBCKGR) RETURN ENDIF GOTO 20 ELSE IF (KEY .EQ. 21 .OR. KEY .EQ. 22) THEN VALUE = VAL ELSE VALUE = dmiss ENDIF CALL INPOPUP('OFF') CALL ITEXTCOLOURN(NFORGR,NBCKGR) RETURN END SUBROUTINE GETINT(TEXT,IVAL) use m_devices USE M_MISSING implicit none integer :: infoattribute integer :: infoinput integer :: ixp integer :: iyp integer :: key integer :: nbckgr integer :: nforgr integer :: nlevel integer :: iv integer :: ival CHARACTER WRDKEY*40, TEXT*(*) COMMON /HELPNOW/ WRDKEY,NLEVEL IV = IVAL IXP = IWS/2 IYP = IHS/2 NFORGR = InfoAttribute(13) NBCKGR = InfoAttribute(14) CALL INPOPUP('ON') 20 CONTINUE CALL ITEXTCOLOUR('BWHITE','RED') CALL INHIGHLIGHT('BLUE','BWHITE') CALL TIMLIN() ! CALL INDOUBLEXYDEF(IXP,IYP,TEXT,1,VAL,6,'(F6.1)') CALL ININTEGERXYDEF(IXP,IYP,TEXT,1,IV,12) CALL TIMLIN() KEY = InfoInput(55) IF (KEY .GE. 24 .AND. KEY .LE. 26) THEN NLEVEL = 3 WRDKEY = TEXT CALL FKEYS(KEY) IF (KEY .EQ. 3) THEN CALL INPOPUP('OFF') CALL ITEXTCOLOURN(NFORGR,NBCKGR) RETURN ENDIF GOTO 20 ELSE IF (KEY .EQ. 21 .OR. KEY .EQ. 22) THEN IVAL = IV ELSE IVAL = int(dmiss) ENDIF CALL INPOPUP('OFF') CALL ITEXTCOLOURN(NFORGR,NBCKGR) RETURN END ! Now a double precision (double precision ::) SUBROUTINE SHOWREAL(TEXT,VALUE) use m_devices implicit none integer :: infoattribute integer :: ixp integer :: iyp integer :: len integer :: nbckgr integer :: nforgr integer :: nlevel double precision :: val double precision :: value CHARACTER WRDKEY*40, TEXT*(*) COMMON /HELPNOW/ WRDKEY,NLEVEL VAL = VALUE IXP = IWS/2 IYP = IHS/2 NFORGR = InfoAttribute(13) NBCKGR = InfoAttribute(14) LEN = len_trim(TEXT) CALL INPOPUP('ON') CALL ITEXTCOLOUR('BWHITE','BLUE') ! CALL IWINOPEN(IXP,IYP,LEN+8,1) CALL IWINOPEN(IXP,IYP,LEN+11,1) CALL ITEXTCOLOUR('BBLUE','BWHITE') CALL IWINOUTSTRINGXY(1,1,TEXT) ! CALL IWINOUTDOUBLEXY(1+LEN,1,VALUE,'(F8.1)') CALL IWINOUTDOUBLEXY(1+LEN,1,VALUE,'(F11.1)') CALL ITEXTCOLOURN(NFORGR,NBCKGR) RETURN END SUBROUTINE GETKEY(KEY) implicit none integer :: i integer :: infoinput integer :: key integer :: keynum integer :: nkey integer :: numc integer :: numkeys COMMON /NKEYS/ NUMKEYS, NKEY(20), NUMC(20) KEY = InfoInput(57) KEYNUM = -999 DO 10 I = 1,NUMKEYS IF (KEY .EQ. NKEY(I)) KEYNUM = I 10 CONTINUE IF (KEYNUM .NE. -999) KEY = NUMC(KEYNUM) RETURN END SUBROUTINE GETKEY2(KEY) implicit none integer :: i integer :: key integer :: keynum integer :: nkey integer :: numc integer :: numkeys COMMON /NKEYS/ NUMKEYS, NKEY(20), NUMC(20) KEYNUM = -999 DO 10 I = 1,NUMKEYS IF (KEY .EQ. NKEY(I)) KEYNUM = I 10 CONTINUE IF (KEYNUM .NE. -999) KEY = NUMC(KEYNUM) RETURN END SUBROUTINE OSC(KEY) use m_devices use unstruc_messages implicit none integer :: infoinput integer :: ixp integer :: iyp integer :: key integer :: len integer :: nlevel CHARACTER STRING*58, WRDKEY*40 IXP = 2 IYP = 10 IF (NOPSYS .EQ. 1) THEN CALL ISCREENMODE('T',80,25,16) ELSE RETURN ENDIF 10 CONTINUE ! CALL BOTLIN(0,1,KEY) ! CALL ITEXTCOLOURN(MNUFOR,MNUBCK) CALL ITEXTCOLOUR('WHITE','BLUE') CALL INPOPUP('ON') CALL InStringXY(IXP,IYP,'enter OS-command ; ',1,STRING,LEN) CALL INPOPUP('OFF') KEY = InfoInput(55) IF (KEY .EQ. 24) THEN WRDKEY = 'OS-command' NLEVEL = 2 CALL HELP(WRDKEY,NLEVEL) ELSE IF (KEY .EQ. 25) THEN CALL HISTOR() ELSE IF ((KEY .EQ. 21 .OR. KEY .EQ. 22) .AND. LEN .GE. 1) THEN WRITE(msgbuf,'(A,A)') 'OPERATING SYSTEM COMMAND: ',STRING(:LEN) call msg_flush() CALL IOsCommand(STRING(:LEN)) ELSE IF (KEY .EQ. 23) THEN IF (NOPSYS .EQ. 1) CALL ISCREENMODE('GR',NPX,NPX,NCOLR) KEY = 3 RETURN ENDIF GOTO 10 END SUBROUTINE DENY(IXP,IYP) implicit none integer :: infoattribute integer :: ixp integer :: iyp integer :: nbckgr integer :: nforgr NFORGR = InfoAttribute(13) NBCKGR = InfoAttribute(14) CALL IWinAction('FPC') CALL ITEXTCOLOUR('BWHITE','RED') CALL IWinOpen(IXP+40,IYP+9,24,2) CALL IWinOutStringXY(1,1,'THIS FILE DOES NOT EXIST') CALL IWinOutStringXY(1,2,'CHOOSE ANOTHER OR EXIT') CALL TOEMAAR() CALL IWinClose(1) CALL ITEXTCOLOURN(NFORGR,NBCKGR) RETURN END SUBROUTINE STOPJA(JA) use unstruc_files use m_devices implicit none integer :: imenutwo integer :: infocursor integer :: iopt integer :: ixp integer :: iyp integer :: ja IXP = INFOCURSOR(1) IYP = INFOCURSOR(2) CALL INPOPUP('ON') CALL ITEXTCOLOUR('BWHITE','RED') CALL INHIGHLIGHT('BLUE','BWHITE') CALL OKAY(0) IOPT = IMenuTwo & ('NO','YES',(IWS-41)/2,IHS/2,'DO YOU REALLY WANT TO '// & 'QUIT THE PROGRAM ? ',1,1) CALL INPOPUP('OFF') IF (IOPT .EQ. 1) THEN JA = 0 ELSE WRITE(msgbuf,'(A)') 'YOU STOPPED THE PROGRAM' call msg_flush() CALL IWinClose(1) CALL STOPINT() ENDIF RETURN END SUBROUTINE TOEMAAR() implicit none integer :: key CALL OKAY(0) CALL TIMLIN() 10 CONTINUE CALL INFLUSH() CALL INKEYEVENT(KEY) IF (KEY .EQ. 50 .OR. (KEY .GE. 254 .AND. KEY .LE. 259)) THEN GOTO 10 ELSE IF (KEY .GE. 24 .AND. KEY .LE. 26) THEN CALL FKEYS(KEY) GOTO 10 ENDIF CALL TIMLIN() RETURN END SUBROUTINE HISTOR() use unstruc_files use unstruc_display use unstruc_version_module, only : unstruc_company, unstruc_program implicit none integer :: ih integer :: infoinput integer :: infowindow integer :: ipos integer :: iw integer :: ixp integer :: iyp integer :: j integer :: jatab integer :: jofnd integer :: k integer :: key integer :: kstart integer :: maxtxt integer :: nlevel integer :: numchc integer :: numtop integer :: numtxt integer :: numwnh PARAMETER (MAXTXT = 400) CHARACTER DIATXT(MAXTXT)*70,WRDKEY*40 COMMON /HELPNOW/ WRDKEY,NLEVEL ! REWIND(MDIA) K = 0 10 CONTINUE READ(MDIA,'(A)',END = 888) K = K + 1 GOTO 10 888 CONTINUE KSTART = K - MAXTXT + 2 REWIND(MDIA) ! K = 0 J = 1 20 CONTINUE K = K + 1 IF (K .GE. KSTART) THEN READ(MDIA,'(A)',END = 999) DIATXT(J) J = J + 1 ELSE READ(MDIA,'(A)',END = 999) ENDIF GOTO 20 999 CONTINUE ! BACKSPACE(MDIA) NUMTXT = J - 1 JATAB = 0 JOFND = 0 NUMTOP = NUMTXT NUMCHC = NUMTXT NLEVEL = 1 ! Initialise CALL IWinWordWrap('OFF') CALL ITEXTCOLOURN(HLPFOR, HLPBCK) CALL INHIGHLIGHT('WHITE','RED') IW = NPOS(3) IXP = NPOS(1) + (IWS-IW)/2 IYP = NPOS(2) IH = IHS - 9 ! Header of filewindow CALL IWinAction('FPC') CALL IWinOpen(IXP,IYP,IW,1) CALL ITEXTCOLOURN(LBLFOR,LBLBCK) CALL IWinOutCentre(1,trim(unstruc_company)//'-'//trim(unstruc_program)// ' HISTORY') CALL ITEXTCOLOURN(HLPFOR,HLPBCK) ! ! Explain keyfunctions in bottom window CALL IWinAction('FPC') CALL IWinOpen(IXP,IHS-1,IW,2) CALL IWinOutStringXY (1,1,'move = ,Pgup, Pgdwn, home; quit = Esc') ! ! Filewindow is middelste window CALL IWinAction('FPC') CALL IWinOpen(IXP,IYP+3,IW,IH) ! NUMWNH = InfoWindow(1) CALL IWinSelect(NUMWNH) ! 30 CONTINUE ! CALL SCRLPG(DIATXT,NUMTXT,NUMTOP,NUMCHC,IH) ! CALL SCROLH(NUMCHC,DIATXT,NUMTXT,NLEVEL,IH,JOFND,JATAB) 50 CONTINUE IPOS = MAX(1,NUMTXT - 10) CALL IWINBROWSETEXT(DIATXT,NUMTXT,10,IPOS,' ') KEY = INFOINPUT(55) IF (KEY .EQ. 24) THEN CALL HELP(WRDKEY,NLEVEL) GOTO 50 ENDIF ! IF (NUMCHC .NE. 0) GOTO 30 CALL IWinClose(1) CALL IWinClose(1) CALL IWinClose(1) RETURN END SUBROUTINE putget_un(NUM,NWHAT,NPUT,NUMB,XP,YP,KEY) implicit none integer :: ja integer :: key integer :: ndraw integer :: nput integer :: num integer :: numb integer :: nwhat double precision :: xp double precision :: yp COMMON /DRAWTHIS/ NDRAW(40) ! CALL DISPUT(NPUT) ! IF (KEY .EQ. 3) THEN CALL MENUH(0,NUM,NWHAT) CALL BOTLIN(0,NUMB,KEY) CALL FRAMES(31) ! ENDIF ! 20 CONTINUE CALL READLOCATOR(XP,YP,KEY) ! IF (KEY .GE. 24 .AND. KEY .LE. 26) THEN CALL FKEYS(KEY) IF (KEY .EQ. 3) RETURN ELSE IF (KEY .EQ. 1) THEN ! BOVEN JA = KEY CALL MENUH(JA,NUM,NWHAT) CALL BOTLIN(0,NUMB,KEY) IF (JA .NE. 0) RETURN ELSE IF (KEY .EQ. 2) THEN ! ONDER JA = KEY CALL BOTLIN(JA,NUMB,KEY) IF (JA .NE. 0) RETURN ELSE IF (KEY .EQ. 90 .OR. KEY .EQ. 90+32) THEN ! Z(oomin) CALL ZOOMIN(KEY,NPUT) RETURN ELSE IF (KEY .EQ. 65 .OR. KEY .EQ. 65+32) THEN ! A(nchor) CALL ANCHOR(XP,YP) ELSE IF (KEY .EQ. 170 .OR. KEY .EQ. 80 .OR. KEY .EQ. 80+32) THEN NDRAW(10) = 1 KEY = 3 RETURN ELSE RETURN ENDIF GOTO 20 END SUBROUTINE MENUH (JA,NUM,NWHAT) use m_devices implicit none integer :: ja integer :: num integer :: nwhat integer :: infoinput integer :: imenuhoriz integer :: iw integer :: key integer :: maxop integer :: maxopt integer :: nlevel PARAMETER (MAXOP = 50) CHARACTER*10 OPTION(MAXOP) CHARACTER WRDKEY*40 COMMON /HELPNOW/ WRDKEY,NLEVEL ! ! Keuzemenu horizontaal ! OPTION (1) = 'FILES ' OPTION (2) = 'OPERATIONS' OPTION (3) = 'DISPLAY ' OPTION (4) = 'EDIT ' OPTION (5) = 'ADDSUBDEL ' OPTION (6) = 'VARIOUS ' MAXOPT = 6 KEY = 0 ! IW = IWS ! 10 CONTINUE ! 20 CONTINUE IF (JA .EQ. 1) THEN CALL TIMLIN() CALL BOTLIN(0,1,KEY) IF (NOPSYS .EQ. 1) THEN CALL ITEXTCOLOUR('BBLUE','BWHITE') ELSE CALL ITEXTCOLOUR('BLACK','BWHITE') ENDIF CALL INHIGHLIGHT('BWHITE','RED') NUM = IMenuHoriz(OPTION,MAXOPT,1,1,IW,0,1) CALL TIMLIN() ENDIF IF (NOPSYS .EQ. 1) THEN CALL InHighlight('BWHITE','WHITE') CALL ITEXTCOLOUR('BWHITE','WHITE') ELSE CALL InHighlight('BLACK','WHITE') CALL ITEXTCOLOUR('BLACK','WHITE') ENDIF CALL IOUTMenuHoriz(OPTION,MAXOPT,1,1,IW,0,1) IF (JA .NE. 1) RETURN ! KEY = InfoInput(55) IF (KEY .NE. 23) THEN NLEVEL = 1 WRDKEY = OPTION(NUM) ENDIF IF (KEY .EQ. 21 .OR. KEY .EQ. 22) THEN ! INS KEY CALL MENUV1(NUM,NWHAT) IF (NWHAT .EQ. 0) GOTO 20 CALL IOUTSTRINGXY(1,2,' OPTION : '//WRDKEY) RETURN ELSE IF (KEY .EQ. 23 .OR. KEY .EQ. -2) THEN ! ESC OR OUTSIDE NUM = 0 RETURN ELSE CALL FKEYS(KEY) IF (KEY .EQ. 3) RETURN ENDIF GOTO 10 ! END SUBROUTINE MENUV2(NWHAT,OPTION,MAXOPT,EXP,MAXEXP) use unstruc_files use m_devices implicit none integer :: imenuvertic integer :: infoinput integer :: infocursor integer :: ja, IXP, IYP integer :: key integer :: maxexp integer :: maxop integer :: maxopt integer :: nlevel integer :: nstart integer :: nwhat PARAMETER (MAXOP = 50) CHARACTER*40 OPTION(MAXOP),EXP(MAXOP),WRDKEY COMMON /HELPNOW/ WRDKEY,NLEVEL ! Keuzemenu verticaal ! NSTART = NWHAT 10 CONTINUE CALL BOTLIN(0,1,KEY) ! IXP = INFOCURSOR(1) IXP = INFOINPUT(62) - 1 IYP = 2 CALL TIMLIN() IF (NOPSYS .EQ. 1) THEN CALL ITEXTCOLOUR('BBLUE','BWHITE') ELSE CALL ITEXTCOLOUR('BLACK','BWHITE') ENDIF CALL INHIGHLIGHT('BWHITE','RED') CALL INPOPUP('ON') NWHAT = IMENUVERTIC(OPTION,MAXOPT,IXP,IYP,' ',0,0,NSTART) CALL INPOPUP('OFF') CALL TIMLIN() ! KEY = InfoInput(55) IF (KEY .NE. 23) THEN NLEVEL = 2 WRDKEY = OPTION(NWHAT) ENDIF IF (KEY .EQ. 21) THEN ! INS KEY WRITE(msgbuf,'(A)') WRDKEY call msg_flush() JA = 0 RETURN ELSE IF (KEY .EQ. 22) THEN ! ENTER KEY JA = 0 RETURN ELSE IF (KEY .EQ. 23 .OR. KEY .EQ. -2) THEN ! ESC OR OUTSIDE JA = 0 NWHAT = 0 RETURN ELSE IF (KEY .GE. 24 .AND. KEY .LE. 26) THEN CALL FKEYS(KEY) IF (KEY .EQ. 3) RETURN ENDIF GOTO 10 ! END SUBROUTINE MENUV3(NWHAT,OPTION,MAXOPT,EXP,MAXEXP) use unstruc_files use m_devices implicit none integer :: imenuvertic, IXP, IYP integer :: infoinput integer :: infocursor integer :: ja integer :: key integer :: maxexp integer :: maxop integer :: maxopt integer :: nlevel integer :: nstart integer :: nwhat PARAMETER (MAXOP = 250) CHARACTER*40 OPTION(MAXOP),EXP(MAXOP),WRDKEY COMMON /HELPNOW/ WRDKEY,NLEVEL ! Keuzemenu verticaal ! NSTART = NWHAT 10 CONTINUE CALL BOTLIN(0,1,KEY) ! IXP = INFOCURSOR(1) IXP = INFOINPUT(62) - 1 IYP = 2 CALL TIMLIN() IF (NOPSYS .EQ. 1) THEN CALL ITEXTCOLOUR('BBLUE','BWHITE') ELSE CALL ITEXTCOLOUR('BLACK','BWHITE') ENDIF CALL INHIGHLIGHT('BWHITE','RED') CALL INPOPUP('ON') NWHAT = IMENUVERTIC(OPTION,MAXOPT,IXP,IYP,' ',0,0,NSTART) CALL INPOPUP('OFF') CALL TIMLIN() ! KEY = InfoInput(55) IF (KEY .NE. 23) THEN NLEVEL = 3 WRDKEY = OPTION(NWHAT) ENDIF IF (KEY .EQ. 21) THEN ! INS KEY WRITE(msgbuf,'(A)') WRDKEY call msg_flush() JA = 0 RETURN ELSE IF (KEY .EQ. 22) THEN ! ENTER KEY JA = 0 RETURN ELSE IF (KEY .EQ. 23 .OR. KEY .EQ. -2) THEN ! ESC OR OUTSIDE JA = 0 NWHAT = 0 RETURN ELSE IF (KEY .GE. 24 .AND. KEY .LE. 26) THEN CALL FKEYS(KEY) IF (KEY .EQ. 3) RETURN ENDIF GOTO 10 ! END SUBROUTINE CHANGEISOPARAMETERS() use unstruc_display use unstruc_version_module, only : unstruc_company, unstruc_program implicit none double precision :: dv, dv2 double precision :: dvi, dvi2 double precision :: dvnu integer :: i integer :: ifexit integer :: ifinit integer :: ih integer :: il integer :: imp integer :: inp integer :: ir integer :: iw integer :: ixp integer :: iyp integer :: jaauto, jaauto2 integer :: key integer :: nbut integer :: ncols, ncols2 integer :: ndec Integer :: nie, nie2 integer :: nien integer :: nis, nis2 integer :: nisn integer :: nlevel integer :: numfld integer :: numpar integer :: nv, nv2 integer :: nvn double precision :: scalesize double precision :: val, val2 double precision :: vmax, vmax2 double precision :: vmaxn double precision :: vmin, vmin2 double precision :: vminn double precision :: xsc double precision :: ysc PARAMETER (NUMPAR = 19, NUMFLD = 2*NUMPAR) INTEGER IX(NUMFLD),IY(NUMFLD),IS(NUMFLD),IT(NUMFLD) CHARACTER WRDKEY*40, OPTION(NUMPAR)*40, HELPM(NUMPAR)*60 COMMON /HELPNOW/ WRDKEY,NLEVEL COMMON /DEPMAX/ VMAX,VMIN,DV,VAL(256),NCOLS(256),NV,NIS,NIE,JAAUTO COMMON /DEPMAX2/ VMAX2,VMIN2,DV2,VAL2(256),NCOLS2(256),NV2,NIS2,NIE2,JAAUTO2 COMMON /SCALEPOS/ XSC,YSC,SCALESIZE,NDEC integer, external :: infoinput external :: highlight_form_line ! NLEVEL = 3 OPTION(1) = 'AUTOSCALE ON OR OFF ' OPTION(2) = 'NUMBER OF ISOCOLOURS ' OPTION(3) = 'MINIMUM ISOLINE VALUE ' OPTION(4) = 'MAXIMUM ISOLINE VALUE ' OPTION(5) = 'ISOLINE INTERVAL ' OPTION(6) = 'COLOUR NUMBER OF FIRST COLOUR ' OPTION(7) = 'COLOUR NUMBER OF LAST COLOUR ' OPTION(8) = 'X COOR LOWER LEFT CORNER OF LEGEND (0-1)' OPTION(9) = 'Y COOR LOWER LEFT CORNER OF LEGEND (0-1)' OPTION(10)= 'NUMBER OF DECIMALS COLOURSCALE LEGEND ' OPTION(11)= 'FONTSIZE COLOURSCALE LEGEND (0.5-1.5) ' OPTION(12)= 'Settings for secondary legend: ' OPTION(13)= ' AUTOSCALE ON OR OFF ' OPTION(14)= ' NUMBER OF ISOCOLOURS ' OPTION(15)= ' MINIMUM ISOLINE VALUE ' OPTION(16)= ' MAXIMUM ISOLINE VALUE ' OPTION(17)= ' ISOLINE INTERVAL ' OPTION(18)= ' COLOUR NUMBER OF FIRST COLOUR ' OPTION(19)= ' COLOUR NUMBER OF LAST COLOUR ' ! 123456789012345678901234567890123456789012345678901234567890 ! 1 2 3 4 5 6 HELPM (1) = 'INTEGER VALUE , AUTOSCALE OFF = 0, ON = 1 ' HELPM (2) = 'INTEGER VALUE =< 30 ' HELPM (3) = 'REAL VALUE, IF CHANGED, AUTOSCALE IS TURNED OFF ' HELPM (4) = 'REAL VALUE, IF CHANGED, AUTOSCALE IS TURNED OFF ' HELPM (5) = 'REAL VALUE, IF CHANGED, AUTOSCALE IS TURNED OFF ' HELPM (6) = 'INTEGER VALUE, STARTINDEX OF ISOCOLOURS (0-255) DEFAULT 46 ' HELPM (7) = 'INTEGER VALUE, ENDINDEX OF ISOCOLOURS (0-255) DEFAULT 224 ' HELPM (8) = 'REAL VALUE (0-1), X COORDINATE LOWER LEFT CORNER LEGEND ' HELPM (9) = 'REAL VALUE (0-1), Y COORDINATE LOWER LEFT CORNER LEGEND ' HELPM (10)= 'INTEGER, NR OF DECIMALS IN COLOURSCALE LEGEND ' HELPM (11)= 'REAL VALUE, FONTSIZE OF COLOURSCALE LEGEND TEXT, DEFAULT 0.5' HELPM (12)= ' ' HELPM (13)= 'INTEGER VALUE , AUTOSCALE OFF = 0, ON = 1 ' HELPM (14)= 'INTEGER VALUE =< 30 ' HELPM (15)= 'REAL VALUE, IF CHANGED, AUTOSCALE IS TURNED OFF ' HELPM (16)= 'REAL VALUE, IF CHANGED, AUTOSCALE IS TURNED OFF ' HELPM (17)= 'REAL VALUE, IF CHANGED, AUTOSCALE IS TURNED OFF ' HELPM (18)= 'INTEGER VALUE, STARTINDEX OF ISOCOLOURS (0-255) DEFAULT 46 ' HELPM (19)= 'INTEGER VALUE, ENDINDEX OF ISOCOLOURS (0-255) DEFAULT 224 ' IR = 0 DO 10 I = 1,NUMPAR IL = IR + 1 IR = IL + 1 IX(IL) = 13 IX(IR) = 95 IY(IL) = 2*I IY(IR) = 2*I IS(IL) = 82 IS(IR) = 10 IT(IL) = 1001 IF (I .GE. 3 .AND. I .LE. 5 .or. I .GE. 15 .AND. I .LE. 17 ) THEN ! Real values: IT(IR) = 6 ELSE ! Integer values: IT(IR) = 2 ENDIF 10 CONTINUE IT(2*8) = 6 IT(2*9) = 6 IT(2*11) = 6 ! Initialise CALL IWinWordWrap('OFF') CALL ITEXTCOLOURN(HLPFOR, HLPBCK) CALL INHIGHLIGHT('WHITE','RED') IW = NPOS(3) IXP = NPOS(1) + (IWS-IW)/2 IYP = NPOS(2) IH = IHS - 9 ! Header of filewindow CALL IWinAction('FPC') CALL IWinOpen(IXP,IYP,IW,1) CALL ITEXTCOLOURN(LBLFOR,LBLBCK) CALL IWinOutCentre(1,trim(unstruc_company)//'-'//trim(unstruc_program) // ' ISOPARAMETER FORM') CALL ITEXTCOLOURN(HLPFOR,HLPBCK) ! ! Explain keyfunctions in bottom window CALL IWinAction('FPC') CALL IWinOpen(IXP,IHS-1,IW,2) CALL IWinOutStringXY(1,1,'move = , Tab, confirm = Enter, no change = Esc, help = F3') CALL IWinOutStringXY(1,2,'right mouse = Enter, click outside window = Esc') ! Filewindow is middelste window CALL IWinAction('FPC') CALL IWinOpen(IXP,IYP+3,IW,IH) CALL InControlKey(29,129) CALL InControlKey(30,128) ! NUMWNH = InfoWindow(1) ! CALL IWinSelect(NUMWNH) ! Define a new form by supplying arrays containing ! field positions, sizes and types CALL IFORMDEFINE('W',NUMFLD,IX,IY,IS,IT) ! Define a help field and define help strings ! for 2 of the 4 input fields CALL IFORMHELP(13,IH,60) IR = 0 DO 20 I = 1,NUMPAR IL = IR + 1 IR = IL + 1 CALL IFORMPUTSTRING (IL,OPTION(I)) CALL IFORMPUTHELP (IR,HELPM(I)) CALL IFORMATTRIBUTEN(IR,0,0,7) 20 CONTINUE CALL IFORMPUTINTEGER( 2,JAAUTO) CALL IFORMPUTINTEGER( 4,NV) CALL IFormPutDouble ( 6,VMIN ,'(F10.3)') CALL IFormPutDouble ( 8,VMAX ,'(F10.3)') DVI = DV/(NV-1) CALL IFormPutDouble (10,DVI ,'(F10.3)') CALL IFORMPUTINTEGER(12,NIS) CALL IFORMPUTINTEGER(14,NIE) CALL IFormPutDouble (16,XSC ,'(F10.3)') CALL IFormPutDouble (18,YSC ,'(F10.3)') CALL IFORMPUTINTEGER(20,NDEC) CALL IFormPutDouble (22,SCALESIZE ,'(F10.3)') ! 2nd isocolour legend: CALL IFORMPUTINTEGER(26,JAAUTO2) CALL IFORMPUTINTEGER(28,NV2) CALL IFormPutDouble (30,VMIN2 ,'(F10.3)') CALL IFormPutDouble (32,VMAX2 ,'(F10.3)') DVI2 = DV2/(NV2-1) CALL IFormPutDouble (34,DVI2 ,'(F10.3)') CALL IFORMPUTINTEGER(36,NIS2) CALL IFORMPUTINTEGER(38,NIE2) ! Display the form with numeric fields left justified ! and set the initial field to number 2 CALL IOUTJUSTIFYNUM('L') IFEXIT = 2 call IFormAttribute(IFEXIT-1, 'BU', ' ', ' ') CALL IFORMSHOW() 30 CONTINUE IFINIT = IFEXIT CALL IFormEditUser(IFINIT, IFEXIT, highlight_form_line) ! check for Help, Confirm, Quit KEY = INFOINPUT(55) IF (KEY .EQ. -2) THEN NBUT = INFOINPUT(61) IF (NBUT .GE. 1) THEN IMP = INFOINPUT(62) + 1 INP = INFOINPUT(63) + 1 IF (IMP .GE. IXP .AND. IMP .LT. IXP+IW .AND. & INP .GE. IYP+3 .AND. INP .LT. IYP+IH+3+2 ) THEN IF (NBUT .EQ. 1) THEN KEY = 21 ELSE KEY = 22 ENDIF ELSE KEY = 23 ENDIF ENDIF ELSE IF (KEY .EQ. -1) THEN KEY = INFOINPUT(57) ENDIF IF (KEY .EQ. 26) THEN WRDKEY = OPTION(IFEXIT/2) CALL HELP(WRDKEY,NLEVEL) ELSE IF (KEY .EQ. 22 .OR. KEY .EQ. 23) THEN IF (KEY .EQ. 22) THEN CALL IFORMGETINTEGER( 2,JAAUTO) JAAUTO = MAX(0,MIN(JAAUTO,1) ) CALL IFORMGETINTEGER( 4,NVN) CALL IFormGetDouble ( 6,VMINN) CALL IFormGetDouble ( 8,VMAXN) CALL IFormGetDouble (10,DVNU) CALL IFORMGETINTEGER(12,NISN) CALL IFORMGETINTEGER(14,NIEN) IF (NV .NE. NVN .OR. NIS .NE. NISN .OR. NIE .NE. NIEN)THEN NV = MAX(2,NVN) NIS = MAX(1,MIN(NISN,250)) NIE = MAX(NIS+NV+1,MIN(NIEN,254)) ENDIF CALL IFormGetDouble (16,XSC) CALL IFormGetDouble (18,YSC) XSC = MAX(0d0,MIN(XSC,1d0)) YSC = MAX(0d0,MIN(YSC,1d0)) CALL IFORMGETINTEGER(20,NDEC) IF (NDEC .GT. 7) NDEC = 7 CALL IFormGetDouble(22,SCALESIZE) SCALESIZE = MAX(0d0,MIN(SCALESIZE,1d0)) IF (DVNU .NE. DVI .OR. VMAXN .NE. VMAX .OR. VMINN .NE. VMIN ) JAAUTO = 0 IF (JAAUTO .EQ. 0) THEN DV = (NV-1)*DVNU IF (VMIN .NE. VMINN .AND. VMAX .NE. VMAXN) THEN VMIN = VMINN VMAX = VMAXN DV = VMAX - VMIN ELSE IF (VMAX .NE. VMAXN) THEN VMAX = VMAXN VMIN = VMAX - DV ELSE VMIN = VMINN VMAX = VMIN + DV ENDIF DO I = 1,NV VAL(I) = VMIN + (I-1)*DV/(NV-1) ENDDO ENDIF ! Secondary isocolour legend CALL IFORMGETINTEGER(26,JAAUTO2) JAAUTO2 = MAX(0,MIN(JAAUTO2,1) ) CALL IFORMGETINTEGER(28,NVN) CALL IFormGetDouble (30,VMINN) CALL IFormGetDouble (32,VMAXN) CALL IFormGetDouble (34,DVNU) CALL IFORMGETINTEGER(36,NISN) CALL IFORMGETINTEGER(38,NIEN) IF (NV2 .NE. NVN .OR. NIS2 .NE. NISN .OR. NIE2 .NE. NIEN)THEN NV2 = MAX(2,NVN) NIS2 = MAX(1,MIN(NISN,250)) NIE2 = MAX(NIS2+NV2+1,MIN(NIEN,254)) ENDIF IF (DVNU .NE. DVI2 .OR. VMAXN .NE. VMAX2 .OR. & VMINN .NE. VMIN2 ) JAAUTO2 = 0 IF (JAAUTO2 .EQ. 0) THEN DV2 = (NV2-1)*DVNU IF (VMIN2 .NE. VMINN .AND. VMAX2 .NE. VMAXN) THEN VMIN2 = VMINN VMAX2 = VMAXN DV2 = VMAX2 - VMIN2 ELSE IF (VMAX2 .NE. VMAXN) THEN VMAX2 = VMAXN VMIN2 = VMAX2 - DV2 ELSE VMIN2 = VMINN VMAX2 = VMIN2 + DV2 ENDIF DO I = 1,NV2 VAL2(I) = VMIN2 + (I-1)*DV2/(NV2-1) ENDDO ENDIF ENDIF CALL IWinClose(1) CALL IWinClose(1) CALL IWinClose(1) RETURN ELSE IF (KEY .EQ. 21) THEN IF (IFEXIT .EQ. 1 .OR. IFEXIT .EQ. 3) THEN WRDKEY = HELPM(IFEXIT) CALL HELP(WRDKEY,NLEVEL) ENDIF ENDIF GOTO 30 END SUBROUTINE SAVEKEYS() implicit none integer :: i integer :: infoinput integer :: keycod integer :: maxkey PARAMETER (MAXKEY = 50) COMMON /KEYCODES/ KEYCOD(MAXKEY) DO 10 I = 1,MAXKEY KEYCOD(I) = INFOINPUT(I) 10 CONTINUE RETURN END SUBROUTINE RESTOREKEYS() implicit none integer :: i integer :: keycod integer :: maxkey PARAMETER (MAXKEY = 50) COMMON /KEYCODES/ KEYCOD(MAXKEY) DO 10 I = 1,MAXKEY CALL INCONTROLKEY(I,KEYCOD(I)) 10 CONTINUE RETURN END SUBROUTINE FKEYS(KEY) implicit none integer :: key integer :: nlevel CHARACTER WRDKEY*40 COMMON /HELPNOW/ WRDKEY,NLEVEL IF (KEY .EQ. 24) THEN ! F1 CALL HELP(WRDKEY,NLEVEL) ELSE IF (KEY .EQ. 25) THEN ! F2 CALL HISTOR() ELSE IF (KEY .EQ. 26) THEN ! F3 CALL OSC(KEY) ENDIF RETURN END SUBROUTINE GIVEKEY(KEY) implicit none integer :: key CHARACTER TEX*14 TEX = ' KEYPRESS= ' WRITE(TEX(11:14),'(I4)') KEY CALL KTEXT(TEX,1,3,15) RETURN END SUBROUTINE TEXTPARAMETERS() use unstruc_display use unstruc_version_module, only : unstruc_company, unstruc_program implicit none integer :: i integer :: ifexit integer :: ifinit integer :: ih Integer :: il integer :: imp integer :: inp integer :: ir integer :: iw integer :: ixp integer :: iyp integer :: key integer :: nbut integer :: nlevel integer :: numfld integer :: numpar double precision :: txtimsize double precision :: txtimx double precision :: txtimy integer, external :: infoinput external :: highlight_form_line PARAMETER (NUMPAR = 9, NUMFLD = 2*NUMPAR) INTEGER IX(NUMFLD),IY(NUMFLD),IS(NUMFLD),IT(NUMFLD) CHARACTER WRDKEY*40, OPTION(NUMPAR)*40, HELPM(NUMPAR)*60 CHARACTER TXTIM*60 COMMON /HELPNOW/ WRDKEY,NLEVEL COMMON /TEXTIM/ TXTIMSIZE, TXTIMX, TXTIMY, TXTIM ! NLEVEL = 3 OPTION(1) = 'LINE 1:' OPTION(2) = 'LINE 2:' OPTION(3) = 'LINE 3:' OPTION(4) = 'FNTSIZ:' OPTION(5) = 'XPOS :' OPTION(6) = 'YPOS :' OPTION(7) = 'SIZE TM' OPTION(8) = 'XPOS TM' OPTION(9) = 'YPOS TM' ! 123456789012345678901234567890123456789012345678901234567890 ! 1 2 3 4 5 6 HELPM (1) = 'FIRST TEXTLINE ' HELPM (2) = 'SECOND TEXTLINE ' HELPM (3) = 'THIRD TEXTLINE ' HELPM (4) = 'FONTSIZE, ONLY FOR TEXTLINES, DEFAULT FONTSIZE = 0.5 ' HELPM (5) = 'RELATIVE SCREEN X POSITION, 0 = LEFT, 1 = RIGHT ' HELPM (6) = 'RELATIVE SCREEN Y POSITION, 0 = BOTTOM, 1 = TOP ' HELPM (7) = 'FONTSIZE, FOR TIME/DATE IN ANIMATE INCREMENTAL ' HELPM (8) = 'SCREEN X POSITION, FOR TIME/DATE IN ANIMATE INCREMENTAL ' HELPM (9) = 'SCREEN Y POSITION, FOR TIME/DATE IN ANIMATE INCREMENTAL ' IR = 0 DO 10 I = 1,NUMPAR IL = IR + 1 IR = IL + 1 IX(IL) = 2 ! IX(IR) = 14 IX(IR) = 56 IY(IL) = 2*I IY(IR) = 2*I ! IS(IL) = 40 IS(IL) = 82 IS(IR) = 60 IT(IL) = 1001 IT(IR) = 1 IF (I .GE. 4) THEN IS(IR) = 5 IT(IR) = 6 ENDIF 10 CONTINUE CALL SAVEKEYS() ! Initialise CALL IWinWordWrap('OFF') CALL ITEXTCOLOURN(HLPFOR, HLPBCK) CALL INHIGHLIGHT('WHITE','RED') IW = NPOS(3) IXP = NPOS(1) + (IWS-IW)/2 IYP = NPOS(2) IH = IHS - 9 ! Header of filewindow CALL IWinAction('FPC') CALL IWinOpen(IXP,IYP,IW,1) CALL ITEXTCOLOURN(LBLFOR,LBLBCK) CALL IWinOutCentre(1,trim(unstruc_company)//'-'//trim(unstruc_program) // ' PARAMETER FORM') CALL ITEXTCOLOURN(HLPFOR,HLPBCK) ! ! Explain keyfunctions in bottom window CALL IWinAction('FPC') CALL IWinOpen(IXP,IHS-1,IW,2) CALL IWinOutStringXY(1,1,'move = , Tab, confirm = Enter, no change = Esc, help = F3') CALL IWinOutStringXY(1,2,'right mouse = Enter, click outside window = Esc') ! Filewindow is middelste window CALL IWinAction('FPC') CALL IWinOpen(IXP,IYP+3,IW,IH) CALL InControlKey(29,129) CALL InControlKey(30,128) ! NUMWNH = InfoWindow(1) ! CALL IWinSelect(NUMWNH) ! Define a new form by supplying arrays containing ! field positions, sizes and types CALL IFORMDEFINE('W',NUMFLD,IX,IY,IS,IT) ! Define a help field and define help strings ! for 2 of the 4 input fields CALL IFORMHELP(13,IH,60) IR = 0 DO 20 I = 1,NUMPAR IL = IR + 1 IR = IL + 1 CALL IFORMPUTSTRING (IL,OPTION(I)) CALL IFORMPUTHELP (IR,HELPM(I)) CALL IFORMATTRIBUTEN(IR,0,0,7) 20 CONTINUE CALL IFORMPUTSTRING (2*1,TXLIN(1)) CALL IFORMPUTSTRING (2*2,TXLIN(2)) CALL IFORMPUTSTRING (2*3,TXLIN(3)) CALL IFormPutDouble (2*4,TXSIZE,'(F5.2)') CALL IFormPutDouble (2*5,TXXpos ,'(F5.2)') CALL IFormPutDouble (2*6,TXYpos ,'(F5.2)') CALL IFormPutDouble (2*7,TXTIMSIZE,'(F5.2)') CALL IFormPutDouble (2*8,TXTIMX ,'(F5.2)') CALL IFormPutDouble (2*9,TXTIMY ,'(F5.2)') ! Display the form with numeric fields left justified ! and set the initial field to number 2 CALL IOUTJUSTIFYNUM('L') IFEXIT = 2 call IFormAttribute(IFEXIT-1, 'BU', ' ', ' ') CALL IFORMSHOW() 30 CONTINUE IFINIT = IFEXIT CALL IFormEditUser(IFINIT, IFEXIT, highlight_form_line) ! check for Help, Confirm, Quit KEY = INFOINPUT(55) IF (KEY .EQ. -2) THEN NBUT = INFOINPUT(61) IF (NBUT .GE. 1) THEN IMP = INFOINPUT(62) + 1 INP = INFOINPUT(63) + 1 IF (IMP .GE. IXP .AND. IMP .LT. IXP+IW .AND. & INP .GE. IYP+3 .AND. INP .LT. IYP+IH+3+2 ) THEN IF (NBUT .EQ. 1) THEN KEY = 21 ELSE KEY = 22 ENDIF ELSE KEY = 23 ENDIF ENDIF ELSE IF (KEY .EQ. -1) THEN KEY = INFOINPUT(57) ENDIF IF (KEY .EQ. 26) THEN WRDKEY = OPTION(IFEXIT/2) CALL HELP(WRDKEY,NLEVEL) ELSE IF (KEY .EQ. 22 .OR. KEY .EQ. 23) THEN IF (KEY .EQ. 22) THEN CALL IFORMGETSTRING (2*1,TXLIN(1)) CALL IFORMGETSTRING (2*2,TXLIN(2)) CALL IFORMGETSTRING (2*3,TXLIN(3)) CALL IFormGetDouble (2*4,TXSIZE ) CALL IFormGetDouble (2*5,TXXpos ) CALL IFormGetDouble (2*6,TXYpos ) CALL IFormGetDouble (2*7,TXTIMSIZE ) CALL IFormGetDouble (2*8,TXTIMX ) CALL IFormGetDouble (2*9,TXTIMY ) TXSIZE = MAX(0d0,MIN(TXSIZE,10d0)) TXXpos = MAX(0d0,MIN(TXXpos,1d0)) TXYpos = MAX(0d0,MIN(TXYpos,1d0)) ENDIF CALL IWinClose(1) CALL IWinClose(1) CALL IWinClose(1) CALL RESTOREKEYS() RETURN ELSE IF (KEY .EQ. 21) THEN IF (IFEXIT .EQ. 1 .OR. IFEXIT .EQ. 3) THEN WRDKEY = HELPM(IFEXIT) CALL HELP(WRDKEY,NLEVEL) ENDIF ENDIF GOTO 30 END SUBROUTINE QNMESSAGE(TEX) use unstruc_display use unstruc_messages implicit none integer :: ih integer :: iw integer :: ixp integer :: iyp CHARACTER TEX*(*) IW = NPOS(3) IXP = NPOS(1) + (IWS-IW)/2 IYP = NPOS(2) IH = IHS - 9 WRITE (msgbuf,'(A)') TEX call msg_flush() CALL ITEXTCOLOURN(HLPFOR, HLPBCK) CALL IWinAction('FPC') CALL IWinOpen(IXP,IHS-1,IW,2) CALL IWINOUTCENTRE(1,TEX) CALL IWINOUTCENTRE(2,'press F2 to read this message') CALL IOSWAIT(200) CALL IWinClose(1) RETURN END SUBROUTINE QNMESSAGEWAIT(TEX) use unstruc_messages use unstruc_display implicit none integer :: ih integer :: iw integer :: ixp integer :: iyp CHARACTER TEX*(*) IW = NPOS(3) IXP = NPOS(1) + (IWS-IW)/2 IYP = NPOS(2) IH = IHS - 9 WRITE (msgbuf,'(A)') TEX call msg_flush() CALL ITEXTCOLOURN(HLPFOR, HLPBCK) CALL IWinAction('FPC') CALL IWinOpen(IXP,IHS-1,IW,2) CALL IWINOUTCENTRE(1,TEX) CALL IWINOUTCENTRE(2,'this message will also appear in HISTORY (F2)') CALL WAIT() CALL IWinClose(1) RETURN END SUBROUTINE BOTLIN(JA,NUMB,KEY) use m_devices use unstruc_display implicit none integer :: imenuhoriz integer :: infoinput integer :: iw integer :: ja integer :: key integer :: li integer :: maxop integer :: maxopt integer :: nlevel integer :: nput integer :: numb integer :: nwhat PARAMETER (MAXOP = 50) CHARACTER*14 OPTION(MAXOP), TEX*14 CHARACTER WRDKEY*40 COMMON /HELPNOW/ WRDKEY,NLEVEL integer, save :: lastmenuheight = 1 10 CONTINUE LI = IHS IW = IWS if (lastmenuheight == 2) then CALL ITEXTCOLOUR('BLACK','WHITE') call IClearLine(IHS-1) ! Clear second-last line to erase old menus. end if lastmenuheight = 1 ! Default (only some are two lines) IF (NUMB .EQ. 0) THEN OPTION(1) = 'CONTINUE ;' OPTION(2) = 'F1 = help ;' OPTION(3) = 'F2 = history ;' OPTION(4) = 'P/PRINTSCREEN;' OPTION(5) = 'STOP ;' MAXOPT = 5 ELSE IF (NUMB .EQ. 1) THEN OPTION(1) = ' = choose ;' OPTION(2) = 'F1 = help ;' OPTION(3) = 'F2 = history ;' OPTION(4) = 'Esc= exit ;' MAXOPT = 4 ELSE IF (NUMB .EQ. 2) THEN if (jafullbottomline== 1) then OPTION(1) = 'A = ANCHOR ;' OPTION(2) = 'I = INSERT ;' OPTION(3) = 'R = REPLACE;' OPTION(4) = 'D = DELETE ;' OPTION(5) = 'X = SPLIT ;' OPTION(6) = 'e = ERASEPL;' OPTION(7) = 'E = invERAS;' OPTION(8) = 'F = REFINE ;' OPTION(9) = 'M = MERGE ;' OPTION(10)= 'L = TO LAND;' OPTION(11)= 'N = TO NET ;' OPTION(12)= 'w/W = dropwat;' OPTION(13)= 'b/B = droplnd;' OPTION(14)= 'TAB = DCURSOR;' OPTION(15)= 'ESC = UNDO ;' OPTION(16)= 'Z = ZOOMIN ;' maxopt = 16 lastmenuheight = 2 else OPTION(1) = 'I=INS ' OPTION(2) = 'R=REPL ' OPTION(3) = 'D=DEL ' OPTION(4) = 'X=SPLIT ' OPTION(5) = 'e=ERAS ' OPTION(6) = 'E=inve ' OPTION(7) = 'F=REF ' OPTION(8) = 'M=MERG ' OPTION(9) = 'L=TOLA ' OPTION(10)= 'N=TONE ' OPTION(11)= 'w/W=wat ' OPTION(12)= 'b/B=lnd ' maxopt = 6 endif ELSE IF (NUMB .EQ. 3) THEN OPTION(1) = 'A = ANCHOR ;' OPTION(2) = 'TAB = DCURSOR;' OPTION(3) = 'ESC = UNDO ;' OPTION(4) = 'Z = ZOOMIN ;' MAXOPT = 4 ELSE IF (NUMB .EQ. 4) THEN OPTION(1) = '+ = DEEPER ;' OPTION(2) = '- = SHALLOW;' OPTION(3) = 'ESC = UNDO ;' OPTION(4) = 'Z = ZOOMIN ;' MAXOPT = 4 ELSE IF (NUMB .EQ. 5) THEN OPTION(1) = 'LMS = WINDOW ;' OPTION(2) = 'RMS = DEFAULT;' OPTION(3) = 'Z = ZOOM OUT ;' OPTION(4) = '+ = LARGER ;' OPTION(5) = '- = SMALLER;' OPTION(6) = 'ESC = UNDO ;' MAXOPT = 6 ELSE IF (NUMB .EQ. 6) THEN ! editgridlineBLOK OPTION(1) = 'F1 = help ;' OPTION(2) = 'F2 = history ;' OPTION(3) = 'P/PRINTSCREEN;' OPTION(4) = 'ESC = UNDO ;' OPTION(5) = 'CLICK GRIDLINE' OPTION(6) = 'AND INFLUENCE ' OPTION(7) = 'READY=RIGHT MS' MAXOPT = 7 ELSE IF (NUMB .EQ. 7) THEN ! editgridshift OPTION(1) = 'F1 = help ;' OPTION(2) = 'F2 = history ;' OPTION(3) = 'P/PRINTSCREEN;' OPTION(4) = 'ESC = UNDO ;' OPTION(5) = 'SHIFT THE ' OPTION(6) = 'INDICATED LINE' OPTION(7) = 'READY=RIGHT MS' MAXOPT = 7 ELSE IF (NUMB .EQ. 8) THEN ! editgridBLOK OPTION(1) = 'F1 = help ;' OPTION(2) = 'F2 = history ;' OPTION(3) = 'P/PRINTSCREEN;' OPTION(4) = 'ESC = UNDO ;' OPTION(5) = 'CLICK A BLOCK;' OPTION(6) = 'READY=RIGHT MS' MAXOPT = 6 ELSE IF (NUMB .EQ. 9) THEN OPTION(1) = 'A = ANCHOR ;' OPTION(2) = 'I = INSERT ;' OPTION(3) = 'R = REPLACE;' OPTION(4) = 'D = DELETE ;' OPTION(5) = 'ESC = UNDO ;' OPTION(6) = 'Z = ZOOMIN ;' OPTION(7) = 'NEW SPLINE RM;' OPTION(8) = 'C = COPY ;' OPTION(9) = 'M = MOVE ;' OPTION(10) = 'X = DEL SPL;' OPTION(11) = 'L = TO LAND;' MAXOPT = 11 ELSE IF (NUMB .EQ. 10) THEN OPTION(1) = 'A = ANCHOR; ' OPTION(2) = 'I = INSERT; ' OPTION(3) = 'R = REPLACE;' OPTION(4) = 'D = DELETE; ' OPTION(5) = 'M = MERGE; ' ! FFFFF OPTION(6) = 'G = NET2CURV' ! FFFFF OPTION(7) = 'C = CUT; ' OPTION(8) = 'X = DELCON; ' OPTION(9) = 'S = SPLIT; ' OPTION(10) = 'V = FIELDMOVE' ! fieldmove OPTION(11) = 'B = FLDROTATE' ! fieldrotate OPTION(12) = '1 = 1D<->2D;' ! kn(3,:) switch 1<->2 OPTION(13) = 'L = TO LAND;' ! snap to land boundary OPTION(14) = 'k = KILL CELL;' ! delete cell and update administration OPTION(15) = 'K = DEREFINE; ' ! derefine by 'Casulli-type' killcell OPTION(16) = 'E = add layer; ' ! add layer of cells lastmenuheight = 2 MAXOPT = 16 ELSE IF (NUMB .EQ. 11) THEN OPTION(1) = '+ = INCREAS;' OPTION(2) = '- = DECREAS;' OPTION(3) = 'ESC = UNDO ;' OPTION(4) = 'SPACE BAR = ;' MAXOPT = 4 ELSE IF (NUMB .EQ. 12) THEN OPTION(1) = 'A = ANCHOR ;' OPTION(2) = 'I = INSERT ;' OPTION(3) = 'R = REPLACE;' OPTION(4) = 'D = DELETE ;' OPTION(5) = 'C = CHANGEV;' OPTION(6) = 'm = SET MIN;' OPTION(7) = 'M = SET MAX;' OPTION(8) = 'H = hide/show;' OPTION(9) = 'ESC = UNDO ;' OPTION(10)= 'Z = ZOOMIN ;' OPTION(11)= 'Q = sampath;' OPTION(12)= 'F = fldfill;' MAXOPT = 12 ELSE IF (NUMB .EQ. 13) THEN OPTION(1) = 'A = ANCHOR ;' OPTION(2) = 'I = INSERTD;' OPTION(3) = 'R = REPLACD;' OPTION(4) = 'D = DELETED;' OPTION(5) = 'ESC = UNDO ;' OPTION(6) = 'Z = ZOOMIN ;' MAXOPT = 6 ELSE IF (NUMB .EQ. 14) THEN ! colourchange OPTION(1) = 'LEFT MOUSE = ' OPTION(2) = 'INDICATE COLOR' OPTION(3) = 'RIGHT MOUSE = ' OPTION(4) = 'CHANGE PALETTE' OPTION(5) = 'ESC = UNDO ;' OPTION(6) = 'Z = ZOOMIN ;' MAXOPT = 6 ELSE IF (NUMB .EQ. 15) THEN OPTION(1) = 'A = ANCHOR ;' OPTION(2) = '+ = +1 HOUR;' OPTION(3) = ' SPACE BAR =' OPTION(4) = 'CONTINUE ;' OPTION(5) = 'Yes SAVEIMAGES' OPTION(6) = 'No SAVEIMAGES ' MAXOPT = 6 ELSE IF (NUMB .EQ. 16) THEN ! editflow OPTION(1) = 'A = ANCHOR; ' OPTION(2) = 'N = Node; ' OPTION(3) = 'L = Link; ' OPTION(4) = 'm = SET MIN;' OPTION(5) = 'M = SET MAX;' OPTION(6) = 'Z = ZOOMIN; ' MAXOPT = 6 ELSE IF (NUMB .EQ. 17) THEN ! editgrid OPTION(1) = 'B = BELL; ' OPTION(2) = 'D = DELETE; ' OPTION(3) = 'I = INSERT; ' OPTION(4) = 'R = REPLACE;' MAXOPT = 4 ENDIF IF (JA .EQ. 2) THEN CALL TIMLIN() IF (NOPSYS .EQ. 1) THEN CALL ITEXTCOLOUR('BBLUE','BWHITE') ELSE CALL ITEXTCOLOUR('BLACK','BWHITE') ENDIF CALL INHIGHLIGHT('BWHITE','RED') NWHAT = IMenuHoriz(OPTION,MAXOPT,1,LI,IW,0,1) CALL TIMLIN() ENDIF IF (NOPSYS .EQ. 1) THEN CALL InHighlight('BWHITE','WHITE') CALL ITEXTCOLOUR('BWHITE','WHITE') ELSE CALL InHighlight('BLACK','WHITE') CALL ITEXTCOLOUR('BLACK','WHITE') ENDIF CALL IOUTMenuHoriz(OPTION,MAXOPT,1,LI,IW,0,1) IF (JA .NE. 2) RETURN KEY = InfoInput(55) IF (KEY .NE. 23) THEN NLEVEL = 3 WRDKEY = OPTION(NWHAT) ENDIF IF (KEY .EQ. 21) THEN ! ins, linker muis IF (NWHAT .GE. 1) THEN IF (OPTION(NWHAT) .EQ. 'F1 = help ;') THEN KEY = 24 ELSE IF (OPTION(NWHAT) .EQ. 'F2 = history ;') THEN KEY = 25 ELSE IF (OPTION(NWHAT) .EQ. 'F3 = command ;') THEN KEY = 26 ELSE IF (OPTION(NWHAT) .EQ. 'ESC = UNDO ;') THEN KEY = 23 ELSE IF (OPTION(NWHAT) .EQ. 'TAB = DCURSOR;') THEN KEY = 27 ELSE IF (OPTION(NWHAT) .EQ. '+ = DEEPER ;') THEN KEY = 162 ELSE IF (OPTION(NWHAT) .EQ. '- = SHALLOW;') THEN KEY = 160 ELSE IF (OPTION(NWHAT) .EQ. 'P/PRINTSCREEN;') THEN KEY = 80 ELSE IF (OPTION(NWHAT) .EQ. 'DEL = CYCLE ;') THEN KEY = 143 ELSE IF (OPTION(NWHAT) .EQ. 'No SAVEIMAGES ') THEN KEY = 110 ELSE IF (OPTION(NWHAT) .EQ. 'Yes SAVEIMAGES') THEN KEY = 121 ELSE IF (OPTION(NWHAT) .EQ. 'Z = ZOOMIN ;') THEN KEY = 90 NPUT = 2 CALL ZOOM3(KEY,NPUT) ELSE IF (OPTION(NWHAT) .EQ. 'STOP ;') THEN CALL STOPINT ! CALL STOPLOGO() ELSE KEY = ICHAR( OPTION(NWHAT)(1:1) ) ENDIF ENDIF TEX = ' ACTIONKEY ' WRITE(TEX(12:14),'(I3)') KEY CALL KTEXT(TEX,1,5,15) RETURN ELSE IF (KEY .EQ. 23) THEN ! ESC RETURN ELSE IF (KEY .GE. 24 .AND. KEY .LE. 26) THEN CALL FKEYS(KEY) IF (KEY .EQ. 3) RETURN GOTO 10 ELSE KEY = 0 RETURN ENDIF END SUBROUTINE ARROWSXYzfac(X0,Y0,UX,UY,VFAC,JW,zfac) implicit none integer :: i integer :: jw double precision :: X0,Y0,UX,UY,VFAC,zfac IF (UX .EQ. 0 .AND. UY .EQ. 0) RETURN uy = uy CALL MOVABS(X0,Y0) CALL LNABS(x0+ux*vfac,y0+uy*vfac*zfac) RETURN END SUBROUTINE ARROWSxy(X0,Y0,UR,VR,VFAC) implicit none double precision :: alfa double precision :: csa integer :: i double precision :: psi0 double precision :: sna double precision :: ur double precision :: vfac double precision :: vr double precision :: x0 double precision :: xlen double precision :: y0 double precision :: X(3), Y(3), XR(3), YR(3) DATA X(1) /0.8d0/, X(2) /1d0/, X(3) /0.8d0/, & Y(1) /-0.1d0/, Y(2) /0d0/, Y(3) /0.1d0/ IF (UR .EQ. 0 .AND. VR .EQ. 0) RETURN DO 10 I = 1,3 XR(I) = X0 + VFAC*(X(I)*UR - Y(I)*VR) YR(I) = Y0 + VFAC*(Y(I)*UR + X(I)*VR) 10 CONTINUE CALL MOVABS(X0,Y0) CALL LNABS(XR(2),YR(2)) CALL LNABS(XR(1),YR(1)) CALL MOVABS(XR(2),YR(2)) CALL LNABS(XR(3),YR(3)) RETURN END SUBROUTINE ARROWS(X0,Y0,UR,VR,PSI0,VFAC) implicit none double precision :: alfa double precision :: csa integer :: i double precision :: psi0 double precision :: sna double precision :: ur double precision :: vfac double precision :: vr double precision :: x0 double precision :: xlen double precision :: y0 double precision :: X(3), Y(3), XR(3), YR(3) DATA X(1) /0.8d0/, X(2) /1d0/, X(3) /0.8d0/, & Y(1) /-0.1d0/, Y(2) /0d0/, Y(3) /0.1d0/ IF (UR .EQ. 0 .AND. VR .EQ. 0) RETURN ALFA = ATAN2(VR,UR) + PSI0 CSA = COS(ALFA) SNA = SIN(ALFA) XLEN = SQRT(UR*UR+VR*VR) DO 10 I = 1,3 XR(I) = X0 + VFAC*XLEN*(X(I)*CSA - Y(I)*SNA) YR(I) = Y0 + VFAC*XLEN*(Y(I)*CSA + X(I)*SNA) 10 CONTINUE CALL MOVABS(X0,Y0) CALL LNABS(XR(2),YR(2)) CALL LNABS(XR(1),YR(1)) CALL MOVABS(XR(2),YR(2)) CALL LNABS(XR(3),YR(3)) RETURN END SUBROUTINE ARROWrcir(X0,Y0,cs,sn) USE M_WEARELT implicit none double precision :: cs integer :: i double precision :: sn double precision :: x0 double precision :: y0 double precision :: X(3), Y(3), XR(3), YR(3) DATA X(1) /0.8d0/, X(2) /1d0/, X(3) /0.8d0/, & Y(1) /-0.1d0/, Y(2) /0d0/, Y(3) /0.1d0/ DO 10 I = 1,3 XR(I) = X0 + 3*rcir*(X(I)*CS - Y(I)*SN) YR(I) = Y0 + 3*rcir*(Y(I)*CS + X(I)*SN) 10 CONTINUE CALL MOVABS(X0,Y0) CALL LNABS(XR(2),YR(2)) CALL LNABS(XR(1),YR(1)) CALL MOVABS(XR(2),YR(2)) CALL LNABS(XR(3),YR(3)) RETURN END SUBROUTINE FILEMENU(MRGF,FILNAM) use unstruc_display use unstruc_version_module, only : unstruc_company, unstruc_program implicit none integer :: ih integer :: ihl integer :: imenuscroll integer :: imp integer :: infoinput integer :: inp integer :: iw integer :: ixp integer :: iyp integer :: jatab integer :: jazekr integer :: keepstartdir integer :: key integer :: l integer :: len integer :: maxfil integer :: maxhlp integer :: mrgf integer :: nahead integer :: nbut integer :: nlevel integer :: numdir integer :: numf integer :: numfil integer :: numtop integer :: numtxi integer :: numtxt ! Gives menu with files filnam ! call with mrgf = 0 means LOAD, mrgf = 1 means SAVE ! return value -2 = old files not found, -1 = ESC PARAMETER (MAXHLP = 2000, MAXFIL = 2000) INTEGER IFDATE(MAXFIL), IFSIZE(MAXFIL) CHARACTER HLPTXT(MAXHLP)*80,FILIST(MAXFIL)*76,FILNAM*76,WRDKEY*40 CHARACTER DIR*76, CURDIR*76, DIR2*76,FILNAM2*76 LOGICAL JA COMMON /HELPC/ HLPTXT,NUMTXT COMMON /STARTDIR/ KEEPSTARTDIR ! Initialise CALL IWinWordWrap('OFF') CALL ITEXTCOLOURN(HLPFOR, HLPBCK) CALL INHIGHLIGHT('WHITE','RED') L = INDEX(FILNAM,'.') IW = NPOS(3) IXP = NPOS(1) + (IWS-IW)/2 IYP = NPOS(2) IH = IHS - 9 IHL = IH - 1 NUMTXI = NUMTXT - IHL NAHEAD = 1 NUMTOP = 1 NUMF = 1 JAZEKR = 0 JATAB = 0 ! CALL IOSDIRNAME(CURDIR) DIR = CURDIR ! ! Header of filewindow CALL IWinAction('FPC') CALL IWinOpen(IXP,IYP,IW,1) CALL ITEXTCOLOURN(LBLFOR,LBLBCK) CALL IWinOutCentre(1,trim(unstruc_company)//'-'//trim(unstruc_program)// ' FILEMENU') CALL ITEXTCOLOURN(HLPFOR,HLPBCK) ! ! Explain keyfunctions in bottom window CALL IWinAction('FPC') CALL IWinOpen(IXP,IHS-1,IW,2) CALL IWinOutStringXY(1,1,'Up or down arrow; confirm = Enter/left,right mouse;') CALL IWinOutStringXY(1,2,'help = F1; toggle between fields = Tab; quit = Esc') ! ! Filewindow is middelste window CALL IWinAction('FPC') CALL IWinOpen(IXP,IYP+3,IW,IH) ! CALL ITEXTCOLOURN(LBLFOR,LBLBCK) CALL IWinOutStringXY(2,7,'NAME / DIRECTORY SIZE DATE TIME') ! IF (MRGF .EQ. 0) THEN CALL IOutStringXY(IXP+1,IYP+3,'LOAD FILENAME') ELSE CALL IOutStringXY(IXP+1,IYP+3,'SAVE FILENAME') ENDIF L = len_trim(FILNAM) CALL IOutStringXY(IXP+15,IYP+3,'('//FILNAM(1:L)//')') CALL IOutStringXY(IXP+1,IYP+6,'DIRECTORY') CALL ITEXTCOLOUR('BWHITE','BLU') CALL IOutStringXY(IXP+1,IYP+4, FILNAM) CALL IOutStringXY(IXP+1,IYP+7, DIR) CALL ITEXTCOLOURN(HLPFOR,HLPBCK) ! CALL IOutStringXY(IXP+47,IYP+6,'choose file in LEFT WINDOW') ! CALL IOutStringXY(IXP+47,IYP+7,'or use TAB to toggle to') ! CALL ITEXTCOLOUR('WHITE','BBLU') ! CALL IOutStringXY(IXP+54,IYP+7,'TAB') ! CALL ITEXTCOLOURN(HLPFOR,HLPBCK) ! CALL IOutStringXY(IXP+47,IYP+8,'NAME or DIRECTORY') 20 CONTINUE CALL UPDATEFILES(FILNAM,FILIST,NUMFIL,NUMDIR,IFDATE,IFSIZE,IXP,IYP,IH) CALL TIMLIN() IF (JATAB .EQ. 0) THEN CALL ITEXTCOLOUR('BWHITE','BLU') CALL INHIGHLIGHT('BLACK','WHITE') NUMF=IMenuScroll(FILIST,NUMFIL,IXP,IYP+10,' ',IH-7,0,NUMF) ELSE IF (JATAB .EQ. 1) THEN CALL INHIGHLIGHT('BLACK','WHITE') FILNAM2 = FILNAM CALL InStringXYDEF(IXP+1,IYP+4,' ',0,FILNAM2,LEN) CALL ITEXTCOLOUR('BWHITE','BLU') CALL IOutStringXY(IXP+1,IYP+4,FILNAM2) IF (INDEX(FILNAM2,'*') .NE. 0) THEN IF (FILNAM2 .NE. FILNAM) THEN FILNAM = FILNAM2 JATAB = 0 GOTO 20 ENDIF ELSE FILNAM = FILNAM2 ENDIF ELSE IF (JATAB .EQ. 2) THEN DIR2 = DIR CALL INHIGHLIGHT('BLACK','WHITE') CALL InStringXYDEF(IXP+1,IYP+7,' ',0,DIR2,LEN) CALL ITEXTCOLOUR('BWHITE','BLU') CALL IOutStringXY(IXP+1,IYP+7,DIR2) IF (DIR2 .NE. DIR) THEN CALL IOSDIRCHANGE(DIR2) DIR = ' ' CALL IOSDIRNAME(DIR) ! IF (INFOERROR(3) .NE. 0) THEN IF (DIR .NE. DIR2) THEN CALL QNERROR('DIRECTORY',DIR2,'DOES NOT EXIST') ELSE ! DIR = DIR2 CALL ITEXTCOLOUR('BWHITE','BLU') CALL IOutStringXY(IXP+1,IYP+7, DIR) JATAB = 0 ENDIF GOTO 20 ENDIF ENDIF CALL TIMLIN() ! KEY = InfoInput(55) IF (KEY .EQ. -2) THEN NBUT = INFOINPUT(61) IF (NBUT .GE. 1) THEN IMP = INFOINPUT(62) + 1 INP = INFOINPUT(63) + 1 IF (IMP .GE. IXP .AND. IMP .LT. IXP+IW .AND. & INP .GE. IYP+3 .AND. INP .LT. IYP+IH+3+2 ) THEN IF (INP .LE. 7) THEN JATAB = 1 ELSE IF (INP .LE. 10) THEN JATAB = 2 ELSE IF (INP .GE. 12) THEN JATAB = 0 ENDIF ELSE KEY = 23 ! Buiten scherm = Esc ENDIF ENDIF ELSE IF (KEY .EQ. -1) THEN KEY = INFOINPUT(57) ENDIF IF (KEY .EQ. 24) THEN ! F1 = HELP NLEVEL = 1 WRDKEY = 'FILE-MENU INSTRUCTIONS' CALL HELP(WRDKEY,NLEVEL) ELSE IF (KEY .EQ. 23) THEN ! Esc MRGF = -1 GOTO 9999 ELSE IF (KEY .EQ. 27) THEN ! Tab JATAB = JATAB + 1 IF (JATAB .EQ. 3) JATAB = 0 ELSE IF (KEY .EQ. 21 .OR. KEY .EQ. 22) THEN !Linker of rechter muis IF (JATAB .EQ. 0) THEN IF (NUMF .LE. NUMDIR) THEN CALL IOSDIRCHANGE( FILIST(NUMF)(1:44) ) DIR = ' ' CALL IOSDIRNAME(DIR) CALL ITEXTCOLOUR('BWHITE','BLU') CALL IOutStringXY(IXP+1,IYP+7, DIR) GOTO 20 ELSE WRITE(FILNAM,'(A)') FILIST(NUMF)(1:44) ENDIF ENDIF L = len_trim(FILNAM) IF (L .EQ. 0) GOTO 20 INQUIRE (FILE = FILNAM(1:L), EXIST = JA) IF (MRGF .EQ. 0) THEN IF (.NOT. JA) THEN CALL DENY(IXP,IYP) ELSE JAZEKR = 1 ENDIF ELSE IF (MRGF .EQ. 1) THEN IF (JA) THEN CALL CONFRM(' FILE ALREADY EXISTS. OVERWRITE ANYWAY ? ', JAZEKR) ELSE JAZEKR = 1 ENDIF ENDIF ! IF (JAZEKR .EQ. 1) THEN IF (INDEX(FILNAM,'*') .NE. 0) GOTO 20 IF (DIR .NE. CURDIR) CALL IOSDIRCHANGE(DIR) CALL NEWFIL(MRGF,FILNAM) GOTO 9999 ENDIF ENDIF GOTO 20 ! 9999 CONTINUE IF (KEEPSTARTDIR .EQ. 1) THEN IF (DIR .NE. CURDIR) CALL IOSDIRCHANGE(CURDIR) ENDIF CALL IWinClose(1) CALL IWinClose(1) CALL IWinClose(1) RETURN END SUBROUTINE UPDATEFILES(FILNAM,FILIST,NUMFIL,NUMDIR,IFDATE,IFSIZE,IXP,IYP,IH) use unstruc_display implicit none integer :: i, j, k, L, ic, ic0 integer :: iday integer :: ih integer :: ihour integer :: imonth integer :: isecnd integer :: ixp integer :: iyear integer :: iyp integer :: maxfil integer :: minute integer :: n integer :: numdir integer :: numfil PARAMETER (MAXFIL = 2000) INTEGER IFDATE(MAXFIL), IFSIZE(MAXFIL) CHARACTER FILIST(MAXFIL)*76,FILNAM*76 ! Work arrays for merging+sorting two file lists ! when multiple wildcard patterns are used in filnam. character filistt(maxfil)*76 integer ifdatet(maxfil), ifsizet(maxfil) NUMFIL = MAXFIL NUMDIR = MAXFIL CALL INHIGHLIGHT('WHITE','BLUE') DO 5 I = 1,MAXFIL FILIST(I) = ' ' 5 CONTINUE CALL IOUTMenuScroll(FILIST,80,IXP,IYP+10,' ',IH-7,0,1) CALL IOSDIRENTRYTYPE('D') CALL IOsDirInfo(' ','*',FILIST,NUMDIR,IFDATE,IFSIZE) IF (NUMDIR .EQ. MAXFIL) THEN NUMDIR = MAXFIL - 1 CALL QNERROR('NOT ALL DIRECTORIES ARE LISTED', ' ', ' ') ENDIF IF (NOPSYS .EQ. 4) THEN DO 10 I = NUMDIR+1,2,-1 FILIST(I) = FILIST(I-1) IFDATE(I) = IFDATE(I-1) IFSIZE(I) = IFSIZE(I-1) 10 CONTINUE FILIST(1) = '.. ' NUMDIR = NUMDIR + 1 ENDIF IF (FILIST(1)(1:3) .EQ. '. ') THEN NUMDIR = NUMDIR - 1 DO 20 I = 1,NUMDIR FILIST(I) = FILIST(I+1) IFDATE(I) = IFDATE(I+1) IFSIZE(I) = IFSIZE(I+1) 20 CONTINUE ENDIF NUMFIL = NUMDIR ! current nr of 'files' CALL IOSDIRENTRYTYPE('F') ic = 0 ic0 = 0 do ! patterns... ic = index(filnam(ic0+1:), ',') N = NUMFIL + 1 if (ic == 0) then ic = len(filnam)+1 else ic = ic0+ic end if numfil = maxfil-numfil ! Max nr of files to read CALL IOsDirInfo(' ',FILNAM(ic0+1:ic-1),FILIST(N),NUMFIL,IFDATE(N),IFSIZE(N)) ic0 = ic i = NUMDIR ! Start index(-1) of sorted files until now j = N-1 ! Start index(-1) of newly found files for next pattern L = 0 ! nr of elements in merged result filistt(:), etc. do if (i==N-1) then ! All 'old' files are already in merged result, just copy remaining 'new' files. do K=j+1,N+numfil-1 L = L+1 filistt(L) = filist(k) ifdatet(L) = ifdate(k) ifsizet(L) = ifsize(k) end do exit end if if (j==N+numfil-1) then ! All 'new' files are already in merged result, just copy remaining 'old' files. do K=i+1,N-1 L = L+1 filistt(L) = filist(k) ifdatet(L) = ifdate(k) ifsizet(L) = ifsize(k) end do exit end if ! Check which of the two next files (old and new) should come first if (lle(filist(i+1), filist(j+1))) then i = i+1 ! increase i and leave j k = i else j = j+1 ! increase j and leave i k = j end if L = L+1 filistt(L) = filist(k) ifdatet(L) = ifdate(k) ifsizet(L) = ifsize(k) end do ! And now put the merged+sorted file list back into the actual file list. do k=1,L filist(NUMDIR+k) = filistt(k) ifdate(NUMDIR+k) = ifdatet(k) ifsize(NUMDIR+k) = ifsizet(k) end do NUMFIL = NUMFIL + N-1 if (ic == len(filnam)+1) then exit ! No further patterns in filnam, proceed. end if end do IF (NUMFIL .EQ. MAXFIL) THEN CALL QNERROR('NOT ALL FILES ARE LISTED', ' ', ' ') ENDIF DO 30 I = 1,NUMFIL IF (I .LE. NUMDIR) THEN IF (NOPSYS .NE. 4) THEN CALL IUPPERCASE( FILIST(I)(1:44) ) ENDIF IF (FILIST(I)(1:3) .EQ. '.. ') THEN WRITE(FILIST(I)(46:57),'(A12)') ' UP-DIR' ELSE WRITE(FILIST(I)(46:57),'(A12)') ' SUB-DIR' ENDIF ELSE IF (NOPSYS .NE. 4) THEN CALL ILOWERCASE( FILIST(I)(1:44) ) ENDIF WRITE(FILIST(I)(46:57),'(I12)') IFSIZE(I) ENDIF CALL IOsFileDate(IFDATE(I),IYEAR,IMONTH,IDAY) WRITE(FILIST(I)(60:69),'(I2,A1,I2,A1,I4)') IDAY ,'-',IMONTH,'-',IYEAR IF (IMONTH .LE. 9) WRITE(FILIST(I)(63:63),'(A1)') '0' CALL IOsFileTime(IFDATE(I),IHOUR,MINUTE,ISECND) WRITE(FILIST(I)(72:76),'(I2,A1,I2)') IHOUR,':',MINUTE IF (MINUTE .LE. 9) WRITE(FILIST(I)(75:75),'(A1)') '0' 30 CONTINUE CALL ITEXTCOLOUR('WHITE','BLU') CALL IOUTMenuScroll(FILIST,NUMFIL,IXP,IYP+10,' ',IH-7,0,1) RETURN END SUBROUTINE LOADBITMAP(FILNAM) USE M_BITMAP USE M_WEARELT use string_module, only: find_first_letter implicit none integer :: ierr integer :: ifirstchar integer :: k integer :: k1 integer :: k2 integer :: l integer :: minp integer :: ndraw integer :: num integer :: numbersonline LOGICAL JAWEL INTEGER INFO(10) COMMON /DRAWTHIS/ NDRAW(40) CHARACTER FILNAM*(*),REC*132 K1 = IFIRSTCHAR(FILNAM) K2 = len_trim(FILNAM) CALL IGRFILEINFO(FILNAM(K1:K2),info,3) MXP = INFO(2) NXP = INFO(3) XB = 0 YB = 0 NDRAW(26) = 0 ALLOCATE(IPIX(1),STAT=IERR) IF (MXP .GE. 1 .AND. NXP .GE. 1) THEN DEALLOCATE(IPIX) ALLOCATE(IPIX(MXP*NXP),STAT=IERR) ! CALL AERR('IPIX(MXP*NXP)',IERR,MXP*NXP) IF (IERR .NE. 0) THEN CALL QNERROR('BITMAP TOO LARGE',' ',' ') ELSE CALL IGRLOADIMAGEDATA(FILNAM(K1:K2),IPIX) ENDIF L = INDEX(FILNAM,'.') INQUIRE(FILE = FILNAM(K1:L)//'xyx', EXIST = JAWEL) IF (JAWEL) THEN CALL OLDFIL(MINP,FILNAM(K1:L)//'xyx') READ(MINP,'(A)',END=999) REC NUM = NUMBERSONLINE(REC) IF (NUM .EQ. 4) THEN READ(REC,*,ERR=888) XP(1),YP(1),XP(3),YP(3) XP(2) = XP(3) YP(2) = YP(1) XP(4) = XP(1) YP(4) = YP(3) ELSE IF (NUM .EQ. 3) THEN READ(REC,*,ERR=777) XP(1),YP(1),XP(3) YP(3) = YP(1) + ( XP(3)-XP(1) )*dble(NXP)/dble(MXP) XP(2) = XP(3) YP(2) = YP(1) XP(4) = XP(1) YP(4) = YP(3) ELSE IF (FIND_FIRST_LETTER(REC) .EQ. 1) THEN READ(MINP,'(A)',END=999) REC DO K = 1,4 READ(MINP,'(A)',END=999) REC IF (NUMBERSONLINE(REC) .EQ. 2) THEN READ(REC,*,ERR=666) XP(K),YP(K) ELSE IF (NUMBERSONLINE(REC) .EQ. 4) THEN READ(REC,*,ERR=555) XP(K),YP(K),XB(K),YB(K) YB(K) = NXP - YB(K) + 1 ENDIF ENDDO ELSE CALL QNERROR('Cannot Read *.xyx File', ' ',' ') ENDIF ENDIF call doclose(MINP) ELSE XP(1) = 0 YP(1) = 0 XP(3) = MXP YP(3) = NXP XP(2) = XP(3) YP(2) = YP(1) XP(4) = XP(1) YP(4) = YP(3) ENDIF NDRAW(26) = 1 ENDIF IF (XB(1) .EQ. 0) XB(1) = -0.5d0 IF (YB(1) .EQ. 0) YB(1) = -0.5d0 IF (XB(2) .EQ. 0) XB(2) = MXP+0.5d0 IF (YB(2) .EQ. 0) YB(2) = -0.5d0 IF (XB(3) .EQ. 0) XB(3) = MXP+0.5d0 IF (YB(3) .EQ. 0) YB(3) = NXP+0.5d0 IF (XB(4) .EQ. 0) XB(4) = -0.5d0 IF (YB(4) .EQ. 0) YB(4) = NXP+0.5d0 RETURN 999 CALL QNEOFERROR(MINP) call doclose(MINP) RETURN 998 CALL QNREADERROR('Trying to Read X1,Y1,X2,XY2,X3,Y3,X4,Y4 but', 'get:'//REC,MINP) call doclose(MINP) RETURN 888 CALL QNREADERROR('Trying to Read X1,Y1,X3,Y3 but Get:',REC,MINP) call doclose(MINP) RETURN 777 CALL QNREADERROR('Trying to Read X1,Y1,X3 but Getting',REC,MINP) call doclose(MINP) RETURN 666 CALL QNREADERROR('Trying to Read four lines X,Y but Getting',REC,MINP) call doclose(MINP) RETURN 555 CALL QNREADERROR('Trying to Read four lines X,Y,MP,NP but Get',REC,MINP) call doclose(MINP) RETURN END SUBROUTINE SHOWBITMAP(jainterpolate) USE M_WEARELT USE M_BITMAP implicit none integer :: i integer :: ini integer :: j integer :: k integer :: key integer :: ndraw integer :: nko double precision :: xd double precision :: xs double precision :: xx double precision :: xx2 double precision :: yd double precision :: ys double precision :: yy double precision :: yy2 double precision :: zs integer :: jainterpolate COMMON /DRAWTHIS/ NDRAW(40) CALL IGRCOLOURMODEL(24) INI = 1 XX = 2 YY = 2 CALL BILINXY(XB, YB, XP, YP, XX, YY, XX2, YY2, INI) IF (INI .EQ. -1) RETURN INI = 0 XD = (XP(2)-XP(1))/(XB(2)-XB(1)) YD = (YP(3)-YP(1))/(YB(3)-YB(1)) XD = XD/2 YD = YD/2 DO J = NXP,1,-1 CALL HALT2(KEY) IF (KEY .EQ. 1) THEN CALL IGRCOLOURMODEL(8) RETURN ENDIF NKO = -1 DO I = 1,MXP K = (NXP-J)*MXP + I XX = dble(I-1) YY = dble(J-1) CALL BILINXY(XB, YB, XP, YP, XX, YY, XX2, YY2, INI) if (jainterpolate==1) then xs = xx2 ys = yy2 zs = 1e-6*ipix(k) call pixcount(xs,ys,zs,1) endif IF (XX2 .GT. X1 .AND. XX2 .LT. X2 .AND. YY2 .GT. Y1 .AND. YY2 .LT. Y2 ) THEN IF (NKO .NE. IPIX(K)) THEN CALL SETCOL(IPIX(K)) NKO = IPIX(K) ENDIF IF (NDRAW(10) .EQ. 0) THEN call RECTANGLE(real(XX2-XD),real(YY2-YD),real(XX2+XD),real(YY2+YD)) ! CALL IGRMOVETO(XX2-XD,YY2-YD) ! CALL IGrRECTANGLEREL(XD*2,YD*2) ELSE CALL KREC5(XX2,YY2,XD,YD) ENDIF ENDIF ENDDO ENDDO CALL IGRCOLOURMODEL(8) if (jainterpolate==1) then call pixcount(xs,ys,zs,2) endif RETURN END SUBROUTINE KREC5(XX,YY,XD,YD) implicit none double precision :: xd double precision :: xx double precision :: yd double precision :: yy real :: X(4), Y(4) X(1) = XX - XD Y(1) = YY - YD X(2) = XX + XD Y(2) = YY - YD X(3) = XX + XD Y(3) = YY + YD X(4) = XX - XD Y(4) = YY + YD CALL PFILLERCORE( X, Y,4) RETURN END SUBROUTINE ISOCOL(VALC,NCOL) implicit none integer :: i, ncol double precision :: valc integer :: NCOLS,NV,NIS,NIE,JAAUTO double precision :: VMAX,VMIN,DV,VAL COMMON /DEPMAX/ VMAX,VMIN,DV,VAL(256),NCOLS(256),NV,NIS,NIE,JAAUTO DO 10 I = NV,1,-1 IF (VALC .GE. VAL(I)) THEN NCOL = I + 1 CALL SETCOL(NCOLS(NCOL)) NCOL = NCOLS(NCOL) RETURN ENDIF 10 CONTINUE NCOL = ncols(1) CALL SETCOL(NCOL) RETURN END SUBROUTINE ISOCOL2(VALC,NCOL) implicit none integer :: i, ncol double precision :: valc integer :: NCOLS,NV,NIS,NIE,JAAUTO double precision :: VMAX,VMIN,DV,VAL COMMON /DEPMAX2/ VMAX,VMIN,DV,VAL(256),NCOLS(256),NV,NIS,NIE,JAAUTO DO 10 I = NV,1,-1 IF (VALC .GE. VAL(I)) THEN NCOL = I + 1 CALL SETCOL(NCOLS(NCOL)) NCOL = NCOLS(NCOL) RETURN ENDIF 10 CONTINUE NCOL = ncols(1) CALL SETCOL(NCOL) RETURN END SUBROUTINE ISOSCALE() ! COPY OF ISOSCALE, DIRTY BUT QUICK use unstruc_colors use M_isoscaleunit use m_flowgeom, only: ndx use m_netw, only: nump, numk use m_polygon, only: npl use unstruc_display implicit none double precision :: dv double precision :: dx double precision :: dxshow double precision :: dy double precision :: hic integer :: i, j, ihcopts, jaauto, ncols, ndec, ndraw, nhcdev, nie, nis, numhcopts, nv, nvec integer :: INC double precision :: rmiss double precision :: scalesize double precision :: val double precision :: vfac double precision :: vfacforce double precision :: vmax double precision :: vmin double precision :: wi double precision :: wic double precision :: x0 double precision :: xd double precision :: xleg double precision :: xsc double precision :: xsc0 double precision :: xsc1 double precision :: xsc2 double precision :: y0 double precision :: yleg double precision :: ysc double precision :: ysc1 double precision :: ysc2 COMMON /DEPMAX/ VMAX,VMIN,DV,VAL(256),NCOLS(256),NV,NIS,NIE,JAAUTO COMMON /HARDCOPY/ NHCDEV,NUMHCOPTS,IHCOPTS(2,20) COMMON /DRAWTHIS/ NDRAW(40) COMMON /SCALEPOS/ XSC,YSC,SCALESIZE,NDEC COMMON /VFAC/ VFAC,VFACFORCE,NVEC COMMON /ARCINFO/ DX, DY, X0, Y0, RMISS, DXSHOW, XD CHARACTER TEXT2*10, FMT*7 CHARACTER (LEN=8) :: TEX CHARACTER (LEN=17) :: MINTEX, MAXTEX REAL INFOGRAPHICS IF (NDRAW(12) == 2 .OR. NDRAW(12) == 4) RETURN IF (NDRAW(8) .LE. 1 .and. NDRAW(28) .le. 1 .and. ndrawpol .le. 2 ) return if ( max(ndx,nump,npl,numk) == 0) return CALL IGRCHARSIZE(real(SCALESIZE),real(SCALESIZE)) WIC = dble(INFOGRAPHICS(3)) HIC = dble(INFOGRAPHICS(4)) INC = NV/30 + 1 ! Max 30 color boxes, otherwise increment > 1 WI = 11*WIC + 1.8d0*HIC XSC0 = 1-XSC IF (XSC0 .LT. 0.6d0) THEN XSC1 = X1 + XSC0*(X2-X1) ELSE XSC1 = X2 - (1-XSC0)*(X2-X1) - WI ENDIF XSC2 = XSC1 + WI YSC1 = Y1 + YSC*(Y2-Y1) MINTEX = 'MN= ' MAXTEX = 'MX= ' WRITE(MINTEX(4:15),'(E11.4)') VMIN WRITE(MAXTEX(4:15),'(E11.4)') VMAX IF (VMAX .GT. VMIN .AND. NDRAW(19) .GE. 2) THEN YSC2 = MIN(YSC1 + (NV/INC+1d0)*HIC + 2.5d0*HIC,Y2) ELSE YSC2 = MIN(YSC1 + ( 1d0)*HIC + 3.5d0*HIC,Y2) XSC2 = XSC2 + 2*WIC ENDIF CALL SETCOL(KLSCL) CALL FBOX(XSC1,YSC1,XSC2,YSC2) CALL SETCOL(KLTEX) CALL BOX(XSC1,YSC1,XSC2,YSC2) CALL IGRCHARJUSTIFY('L') CALL GTEXT(PARAMTEX(1),XSC1+WIC,YSC2-1*HIC,KLTEX) CALL GTEXT(UNIT(1) ,XSC1+WIC,YSC2-2*HIC,KLTEX) IF (VMAX .GT. VMIN .AND. NDRAW(19) .GE. 2) THEN IF ( ABS(VMIN) .GT. ABS(VMAX) ) THEN CALL DISPFORMscale(VMIN,FMT,NDEC) ELSE CALL DISPFORMscale(VMAX,FMT,NDEC) ENDIF XLEG = XSC1 + WIC J = 1 DO I = 1,NV,INC YLEG = YSC1 + J*HIC WRITE(TEXT2(1:10),FMT) VAL(I) CALL JGTEXT (TEXT2,XLEG,YLEG,NCOLS(I),WIC,HIC,0) J = J+1 ENDDO TEXT2 = ' ' CALL JGTEXT (TEXT2,XLEG,YLEG+HIC,NCOLS(NV+1),WIC,HIC,0) ELSE CALL GTEXT(MAXTEX,XSC1+WIC,YSC2-3*HIC,KLTEX) CALL GTEXT(MINTEX,XSC1+WIC,YSC2-4*HIC,KLTEX) ENDIF RETURN END SUBROUTINE ISOSCALE2() ! tekenen legenda use M_isoscaleunit use unstruc_display use m_samples implicit none double precision :: dv double precision :: dx double precision :: dxshow double precision :: dy double precision :: hic integer :: i, j integer :: INC integer :: ihcopts integer :: jaauto integer :: ncols integer :: ndec integer :: ndraw integer :: nhcdev integer :: nie integer :: nis integer :: numhcopts integer :: nv integer :: nvec double precision :: rmiss double precision :: scalesize double precision :: val double precision :: vfac double precision :: vfac2 double precision :: vfacforce double precision :: vmax double precision :: vmin double precision :: wi double precision :: wic double precision :: x0 double precision :: xd double precision :: xleg double precision :: xsc double precision :: xsc1 double precision :: xsc2 double precision :: y0 double precision :: yleg double precision :: ysc double precision :: ysc1 double precision :: ysc2 double precision :: yt COMMON /DEPMAX2/ VMAX,VMIN,DV,VAL(256),NCOLS(256),NV,NIS,NIE,JAAUTO COMMON /HARDCOPY/ NHCDEV,NUMHCOPTS,IHCOPTS(2,20) COMMON /DRAWTHIS/ NDRAW(40) COMMON /SCALEPOS/ XSC,YSC,SCALESIZE,NDEC COMMON /VFAC/ VFAC, VFACFORCE,NVEC COMMON /ARCINFO/ DX, DY, X0, Y0, RMISS, DXSHOW, XD CHARACTER TEXT2*10, FMT*7 CHARACTER (LEN=8) :: TEX CHARACTER (LEN=16) :: MINTEX, MAXTEX REAL INFOGRAPHICS IF (NDRAW(12) == 1 .OR. NDRAW(12) == 4) RETURN ! 1 = isoscale off IF (NDRAW(29) <= 1 .AND. NDRAW (7) <= 1) then if (ndraw(32) <= 0 .or. NS<1) RETURN ! 1 = no, which linval endif CALL IGRCHARSIZE(real(SCALESIZE),real(SCALESIZE)) WIC = INFOGRAPHICS(3) HIC = INFOGRAPHICS(4) INC = NV/30 + 1 ! Max 30 color boxes, otherwise increment > 1 WI = 10*WIC + 1.8d0*HIC IF (XSC .LT. 0.6d0) THEN XSC1 = X1 + XSC*(X2-X1) ELSE XSC1 = X2 - (1-XSC)*(X2-X1) - WI ENDIF XSC2 = XSC1 + WI YSC1 = Y1 + YSC*(Y2-Y1) MINTEX = 'MIN: ' MAXTEX = 'MAX: ' WRITE(MINTEX(6:16),'(E11.4)') VMIN WRITE(MAXTEX(6:16),'(E11.4)') VMAX IF (VMAX .GT. VMIN .AND. NDRAW(11) .GE. 2) THEN YSC2 = MIN(YSC1 + (NV/INC+1d0)*HIC + 2.5d0*HIC,Y2) ELSE YSC2 = MIN(YSC1 + ( 1d0)*HIC + 3.5d0*HIC,Y2) XSC2 = XSC2 + 2*WIC ENDIF CALL SETCOL(KLSCL) CALL FBOX(XSC1,YSC1,XSC2,YSC2) CALL SETCOL(KLTEX) CALL BOX(XSC1,YSC1,XSC2,YSC2) CALL IGRCHARJUSTIFY('L') CALL GTEXT(PARAMTEX(2),XSC1+WIC,YSC2-1*HIC,KLTEX) CALL GTEXT(UNIT(2) ,XSC1+WIC,YSC2-2*HIC,KLTEX) IF (VMAX .GT. VMIN .AND. NDRAW(11) .GE. 2) THEN IF ( ABS(VMIN) .GT. ABS(VMAX) ) THEN CALL DISPFORMscale(VMIN,FMT,NDEC) ELSE CALL DISPFORMscale(VMAX,FMT,NDEC) ENDIF XLEG = XSC1 + WIC J = 1 DO I = 1,NV, INC YLEG = YSC1 + J*HIC WRITE(TEXT2(1:10),FMT) real(VAL(I)) CALL JGTEXT (TEXT2,XLEG,YLEG,NCOLS(I),WIC,HIC,0) J = J+1 ENDDO TEXT2 = ' ' CALL JGTEXT (TEXT2,XLEG,YLEG+HIC,NCOLS(NV+1),WIC,HIC,0) ELSE CALL GTEXT(MAXTEX,XSC1+WIC,YSC2-3*HIC,KLTEX) CALL GTEXT(MINTEX,XSC1+WIC,YSC2-4*HIC,KLTEX) ENDIF IF (NDRAW(15) .EQ. 11 .OR. NDRAW(15) .EQ. 13 .OR. NDRAW(15) .EQ. 15 .OR. NDRAW(15) .EQ. 16) THEN CALL SETCOL(KLSCL) YT = YSC1-5*HIC CALL FBOX(XSC1,YT-4*HIC,XSC2,YT) CALL SETCOL(KLTEX) CALL BOX(XSC1,YT-4*HIC,XSC2,YT) VFAC2 = 0.3d0*(XSC2-XSC1) CALL SETCOL(KLVEC) CALL ARROWS(XSC1+WIC,YT-2*HIC,1d0,0d0,0d0,VFAC2) TEX = ' 2.3 m/s' ! WRITE(TEX(1:4),'(F4.1)') VFAC2/(DX*VFAC) WRITE(TEX(1:4),'(F4.1)') real(VFAC2/(VFAC)) CALL IGRCHARJUSTIFY('R') CALL GTEXT(TEX,XSC2-WIC,YT-2*HIC,KLTEX) ENDIF RETURN END subroutine DISPFORMscale(value,fmt,NDEC) implicit none integer :: n1 integer :: n2 integer :: ndec double precision :: value character fmt*(*) fmt='(f10.3)' if (value .eq. 0d0) then fmt='(f3.1)' return endif n1 = int(log10(abs(value))) if (n1 .le. 6 .and. n1 .gt. 0) then n2 = min(9,n1 + 3) write (fmt(6:6),'(i1)') 9 - n2 else if (n1 .ge. -5 .and. n1 .lt. 0) then write (fmt(6:6),'(i1)') 6 else if ( n1 .eq. 0) then write (fmt(6:6),'(i1)') 6 else fmt ='(e10.3)' endif IF (NDEC .GT. 0) write (fmt(6:6),'(i1)') NDEC ! -1 return end SUBROUTINE JGTEXT(TEX,X,Y,NCOL,WIC,HIC,JAHOOG) ! grafische tekst, grafische posities, met kleurblokjes ERONDER use unstruc_colors implicit none double precision :: hic, WIC integer :: jahoog integer :: ncol integer :: ndraw double precision :: x double precision :: xa double precision :: xb double precision :: xp double precision :: y double precision :: ya double precision :: yb double precision :: yp CHARACTER TEX*(*) COMMON /DRAWTHIS/ NDRAW(40) CALL SETCOL(KLTEX) CALL DRAWTEXT(real(X),real(Y),TEX) CALL GETPOS(XP,YP) XA = XP + 0.3d0*WIC YA = YP - 0.8d0*HIC + JAHOOG*HIC XB = XA + 1.3d0*WIC YB = YA + 0.7d0*HIC IF (NCOL .NE. 0) THEN CALL SETCOL(NCOL) IF (JAHOOG .EQ. 0) THEN CALL FBOX(XA,YA,XB,YB) CALL SETCOL(KLTEX) CALL BOX(XA,YA,XB,YB) ELSE CALL FBOX(XA,YA,XB,YB) ENDIF ENDIF RETURN END SUBROUTINE SETCOLTABFILE(FILNAM,JASECOND) use unstruc_colors implicit none double precision :: dv, dv2 integer :: i integer :: iblue integer :: igreen integer :: ihue integer :: ired integer :: isat integer :: jaauto, jaauto2 integer :: jahls integer :: jasecond integer :: k integer :: light integer :: minp integer :: ncols, ncols2 integer :: nie, nie2 integer :: nis, nis2 integer :: nisn integer :: nv, nv2 double precision :: val, val2 double precision :: vmax, vmax2 double precision :: vmin, vmin2 integer, parameter :: mxq = 1, mxclass = 1 COMMON /DEPMAX/ VMAX,VMIN,DV,VAL(256),NCOLS(256),NV,NIS,NIE,JAAUTO COMMON /DEPMAX2/ VMAX2,VMIN2,DV2,VAL2(256),NCOLS2(256),NV2,NIS2,NIE2,JAAUTO2 CHARACTER FILNAM*(*), FOLNAM*76 FOLNAM = FILNAM IF (FILNAM(1:5) .EQ. '*.hls') THEN MINP = 0 CALL FILEMENU(MINP,FOLNAM) ELSE CALL SYSORLOCALFIL(MINP,FOLNAM,0) ENDIF IF (MINP .GT. 0) THEN IF (INDEX(FOLNAM,'HLS') .GE. 1 .OR. INDEX(FOLNAM,'hls') .GE. 1 ) THEN JAHLS = 1 ELSE IF (INDEX(FOLNAM,'RGB') .GE. 1 .OR. INDEX(FOLNAM,'rgb') .GE. 1 ) THEN JAHLS = 2 ELSE CALL QNMESSAGE('CHOOSE *.hls OR *.rgb FILE') RETURN ENDIF coltabfile = folnam K = 1 READ (MINP,*,END = 999,ERR=888) 20 CONTINUE IF (JAHLS .EQ. 1) THEN READ (MINP,*,END = 999,ERR=888) IHUE,LIGHT,ISAT IHUE = MAX(0,MIN(IHUE ,360)) LIGHT = MAX(0,MIN(LIGHT,100)) ISAT = MAX(0,MIN(ISAT ,100)) IF (JASECOND .EQ. 0) THEN CALL IGRPALETTEHLS(NCOLS(K),IHUE,LIGHT,ISAT) ELSE CALL IGRPALETTEHLS(NCOLS2(K),IHUE,LIGHT,ISAT) ENDIF ELSE IF (JAHLS .EQ. 2) THEN READ (MINP,*,END = 999,ERR=888) IRED,IGREEN,IBLUE IRED = MAX(0,MIN(IRED ,255)) IGREEN= MAX(0,MIN(IGREEN ,255)) IBLUE = MAX(0,MIN(IBLUE ,255)) IF (JASECOND .EQ. 0) THEN CALL IGRPALETTERGB(NCOLS(K),IRED,IGREEN,IBLUE) ELSE CALL IGRPALETTERGB(NCOLS2(K),IRED,IGREEN,IBLUE) ENDIF ENDIF K = K + 1 GOTO 20 999 CONTINUE call doclose (MINP) IF (JASECOND .EQ. 0) THEN NV = MAX(2,K-2) NIE = NIS + NV + 1 else NV2 = MAX(2,K-2) NIE2 = NIS2 + NV2 + 1 ENDIF RETURN 888 CONTINUE ! Read error in coltabfile, back to defaults. call doclose (MINP) ENDIF RETURN END SUBROUTINE CHANGENUMERICALPARAMETERS() use m_netw USE M_FLOW use m_flowgeom USE m_sferic use m_wind use unstruc_display use m_reduce use m_sediment, only: dmorfac use unstruc_version_module, only : unstruc_company, unstruc_program use unstruc_messages use m_fixedweirs implicit none integer :: numpar, numfld, numparactual, numfldactual PARAMETER (NUMPAR = 19, NUMFLD = 2*NUMPAR) INTEGER IX(NUMFLD),IY(NUMFLD),IS(NUMFLD),IT(NUMFLD) CHARACTER WRDKEY*40, OPTION(NUMPAR)*40, HELPM(NUMPAR)*60 integer :: nlevel COMMON /HELPNOW/ WRDKEY,NLEVEL integer, external :: infoinput external :: highlight_form_line ! integer :: ir, il, iw, ixp, iyp, ih, i, iuvfieldorg, ifexit, ifinit, key, ja, niadvec integer :: nbut, imp, inp NLEVEL = 4 OPTION( 1) = 'COURANT NR ( )' ; it(2* 1) = 6 OPTION( 2) = 'IADVEC ' ; it(2* 2) = 2 OPTION( 3) = 'IADVEC1D ' ; it(2* 3) = 2 OPTION( 4) = 'Limtyp scalar transport ' ; it(2* 4) = 2 OPTION( 5) = 'Limtyp hu ' ; it(2* 5) = 2 OPTION( 6) = 'Limtyp momentum transport ' ; it(2* 6) = 2 OPTION( 7) = 'itstep ' ; it(2* 7) = 2 OPTION( 8) = 'teta ( ) ' ; it(2* 8) = 6 OPTION( 9) = 'icgsolver ( ) ' ; it(2* 9) = 2 OPTION(10) = 'Transport Method ( ) ' ; it(2*10) = 2 OPTION(11) = 'Salinity included 0/1 ( ) ' ; it(2*11) = 2 OPTION(12) = 'Temperature model nr, 0=no, 5=heatflx() ' ; it(2*12) = 2 OPTION(13) = 'Anti creep ( ) ' ; it(2*13) = 2 OPTION(14) = 'Maximum nr of itearions Forester ( ) ' ; it(2*14) = 2 OPTION(15) = 'irov 0,1,2,3 ( ) ' ; it(2*15) = 2 OPTION(16) = 'icorio, 0, 4, or 5 ( ) ' ; it(2*16) = 2 OPTION(17) = 'jatidep tidal potential forcing 0/1 ( ) ' ; it(2*17) = 2 OPTION(18) = 'EpsCG, CG solver stop criterion ( ) ' ; it(2*18) = 6 OPTION(19) = 'Epshu, flooding criterion (m) ' ; it(2*19) = 6 ! 123456789012345678901234567890123456789012345678901234567890 ! 1 2 3 4 5 6 HELPM ( 1) = 'Total COURANT ' HELPM ( 2) = '0=N0, 33=Full Perot, 1=wenn tot, 2=wenn inoutdif, 3 = ' HELPM ( 3) = 'see iadvec ' HELPM ( 4) = '0=No, 1=Minmod, 2=VanLeer, 3=Kooren, 4=Monotonized Central ' HELPM ( 5) = '0=No, 1=Minmod, 2=VanLeer, 3=Kooren, 4=Monotonized Central ' HELPM ( 6) = '0=No, 1=Minmod, 2=VanLeer, 3=Kooren, 4=Monotonized Central ' HELPM ( 7) = '2=implicit pressure, 1=no pressure, 0 = only transport ' HELPM ( 8) = '0.5 < teta =< 1.0 ' HELPM ( 9) = '1 = GS_OMP, 2 = GS_OMPthreadsafe, 3 = GS, 4 = SaadILUD ' HELPM (10) = '0=Herman transport, 1=transport module (default) ' HELPM (11) = '0=no salinity, 1=yes salinity ' HELPM (12) = 'Temperature model nr, 0=no temp, 5=heat flux 3=excess ' HELPM (13) = '0=No, 1=Yes anticreep ' HELPM (14) = '0=No Forester , only in transport hk ' HELPM (15) = '0=free slip, 1 =partial slip, 2=no slip, 3 =hydraul. smooth ' HELPM (16) = '0=no coriolois, 4=coriolis, 5 = 4 limited below 1 m ' HELPM (17) = '0=no tidal potential, 1=yes tidal potential ' HELPM (18) = 'Guus, if max(abs(r/rk) < epscg , or Saad L2norm < epscg ' HELPM (19) = 'hu > epshu: link flows ' CALL SAVEKEYS() NUMPARACTUAL = NUMPAR NUMFLDACTUAL = 2*NUMPARACTUAL IR = 0 DO I = 1,NUMPARACTUAL IL = IR + 1 IR = IL + 1 IX(IL) = 13 IX(IR) = 95 IY(IL) = 2*I IY(IR) = 2*I IS(IL) = 82 IS(IR) = 10 IT(IL) = 1001 ENDDO ! Initialise CALL IWinWordWrap('OFF') CALL ITEXTCOLOURN(HLPFOR, HLPBCK) CALL INHIGHLIGHT('WHITE','RED') IW = NPOS(3) IXP = NPOS(1) + (IWS-IW)/2 IYP = NPOS(2) IH = IHS - 9 ! Header of filewindow CALL IWinAction('FPC') CALL IWinOpen(IXP,IYP,IW,1) CALL ITEXTCOLOURN(LBLFOR,LBLBCK) CALL IWinOutCentre(1,trim(unstruc_company)//'-'//trim(unstruc_program) // ' PARAMETER FORM') CALL ITEXTCOLOURN(HLPFOR,HLPBCK) ! ! Explain keyfunctions in bottom window CALL IWinAction('FPC') CALL IWinOpen(IXP,IHS-1,IW,2) CALL IWinOutStringXY(1,1,'move = ., Tab, confirm = Enter, no change = Esc, help = F3') CALL IWinOutStringXY(1,2,'right mouse = Enter, click outside window = Esc') ! Filewindow is middelste window CALL IWinAction('FPC') CALL IWinOpen(IXP,IYP+3,IW,IH) CALL InControlKey(29,129) CALL InControlKey(30,128) ! NUMWNH = InfoWindow(1) ! CALL IWinSelect(NUMWNH) ! Define a new form by supplying arrays containing ! field positions, sizes and types CALL IFORMDEFINE('W',NUMFLDACTUAL,IX,IY,IS,IT) ! Define a help field and define help strings ! for 2 of the 4 input fields CALL IFORMHELP(13,IH,60) IR = 0 DO I = 1,NUMPARACTUAL IL = IR + 1 IR = IL + 1 CALL IFORMPUTSTRING (IL,OPTION(I)) CALL IFORMPUTHELP (IR,HELPM(I)) CALL IFORMATTRIBUTEN(IR,0,0,7) ENDDO NIADVEC = IADVEC CALL IFormPutDouble (2* 1 ,CFLmx, '(F8.3)' ) CALL IFORMPUTINTEGER (2* 2 ,NIADVEC ) CALL IFORMPUTINTEGER (2* 3 ,IADVEC1D ) CALL IFORMPUTINTEGER (2* 4 ,Limtypsa ) CALL IFORMPUTINTEGER (2* 5 ,Limtyphu ) CALL IFORMPUTINTEGER (2* 6 ,Limtypmom ) CALL IFORMPUTINTEGER (2* 7 ,itstep ) CALL IFormPutDouble (2* 8 ,teta0 ,'(F10.3)') CALL IFORMPUTinteger (2* 9 ,icgsolver ) CALL IFORMPUTinteger (2*10 ,jatransportmodule) CALL IFORMPUTinteger (2*11 ,jasal ) CALL IFORMPUTinteger (2*12 ,jatem ) CALL IFORMPUTinteger (2*13 ,jacreep ) CALL IFORMPUTinteger (2*14 ,Maxitverticalforestersal ) CALL IFORMPUTinteger (2*15 ,irov ) CALL IFORMPUTinteger (2*16 ,icorio ) CALL IFORMPUTinteger (2*17 ,jatidep ) CALL IFormPutDouble (2*18 ,epscg, '(e10.5)' ) CALL IFormPutDouble (2*19 ,epshu, '(e10.5)' ) ! Display the form with numeric fields left justified ! and set the initial field to number 2 CALL IOUTJUSTIFYNUM('L') IFEXIT = 2 call IFormAttribute(IFEXIT-1, 'BU', ' ', ' ') CALL IFORMSHOW() 30 CONTINUE IFINIT = IFEXIT CALL IFormEditUser(IFINIT, IFEXIT, highlight_form_line) ! check for Help, Confirm, Quit KEY = INFOINPUT(55) IF (KEY .EQ. -2) THEN NBUT = INFOINPUT(61) IF (NBUT .GE. 1) THEN IMP = INFOINPUT(62) + 1 INP = INFOINPUT(63) + 1 IF (IMP .GE. IXP .AND. IMP .LT. IXP+IW .AND. & INP .GE. IYP+3 .AND. INP .LT. IYP+IH+3+2 ) THEN IF (NBUT .EQ. 1) THEN KEY = 21 ELSE KEY = 22 ENDIF ELSE KEY = 23 ENDIF ENDIF ELSE IF (KEY .EQ. -1) THEN KEY = INFOINPUT(57) ENDIF IF (KEY .EQ. 26) THEN WRDKEY = OPTION(IFEXIT/2) CALL HELP(WRDKEY,NLEVEL) ELSE IF (KEY .EQ. 22 .OR. KEY .EQ. 23) THEN IF (KEY .EQ. 22) THEN CALL IFormgetDouble (2* 1 ,CFLmx ) CALL IFORMgeTINTEGER (2* 2 ,NIADVEC ) CALL IFORMgeTINTEGER (2* 3 ,IADVEC1D ) CALL IFORMgeTINTEGER (2* 4 ,Limtypsa ) ; limtypsa = max(0, min (limtypsa ,30)) CALL IFORMgeTINTEGER (2* 5 ,Limtyphu ) ; limtyphu = max(0, min (limtyphu ,30)) CALL IFORMgeTINTEGER (2* 6 ,Limtypmom ) ; limtypmom = max(0, min (limtypmom,30)) CALL IFORMgeTINTEGER (2* 7 ,itstep ) CALL IFormgetDouble (2* 8 ,teta0 ) CALL IFORMgeTinteger (2* 9 ,icgsolver ) CALL IFORMgeTinteger (2*10 ,jatransportmodule) CALL IFORMgeTinteger (2*11 ,jasal ) CALL IFORMgeTinteger (2*12 ,jatem ) CALL IFORMgeTinteger (2*13 ,jacreep ) CALL IFORMgeTinteger (2*14 ,Maxitverticalforestersal ) CALL IFORMgeTinteger (2*15 ,irov ) CALL IFORMgeTinteger (2*16 ,icorio ) CALL IFORMgeTinteger (2*17 ,jatidep ) CALL IFormgetDouble (2*18 ,epscg ) CALL IFormgetDouble (2*19 ,epshu ) epshs = 0.2d0*epshu ! minimum waterdepth for setting cfu if (niadvec .ne. iadvec) then if (nfxw > 0) then call confrm('If Fixedweirs present, please reinitialise the model', ja) endif iadvec = niadvec call iadvecini() endif ENDIF CALL IWinClose(1) CALL IWinClose(1) CALL IWinClose(1) CALL RESTOREKEYS() RETURN ELSE IF (KEY .EQ. 21) THEN IF (IFEXIT .EQ. 1 .OR. IFEXIT .EQ. 3) THEN WRDKEY = HELPM(IFEXIT) CALL HELP(WRDKEY,NLEVEL) ENDIF ENDIF GOTO 30 END SUBROUTINE CHANGENUMERICALPARAMETERS SUBROUTINE CHANGENUMERICALPARAMETERS2() use m_netw USE M_FLOW use m_flowgeom USE m_sferic use m_wind use unstruc_display use m_reduce use unstruc_version_module, only : unstruc_company, unstruc_program use unstruc_messages use m_fixedweirs implicit none integer :: numpar, numfld, numparactual, numfldactual PARAMETER (NUMPAR = 14, NUMFLD = 2*NUMPAR) INTEGER IX(NUMFLD),IY(NUMFLD),IS(NUMFLD),IT(NUMFLD) CHARACTER WRDKEY*40, OPTION(NUMPAR)*40, HELPM(NUMPAR)*60 integer :: nlevel COMMON /HELPNOW/ WRDKEY,NLEVEL integer, external :: infoinput external :: highlight_form_line ! integer :: ir, il, iw, ixp, iyp, ih, i, iuvfieldorg, ifexit, ifinit, key, ja, niadvec integer :: nbut, imp, inp NLEVEL = 4 OPTION( 1) = 'ITURBULENCEMODEL ( )' ; it(2* 1) = 2 OPTION( 2) = 'JAUSTARINT ( )' ; it(2* 2) = 2 OPTION( 3) = 'jabaroctimeint ' ; it(2* 3) = 2 OPTION( 4) = 'JAVAKEPS ' ; it(2* 4) = 2 OPTION( 5) = 'IDENSFORM ' ; it(2* 5) = 2 OPTION( 6) = 'JARHOXU ' ; it(2* 6) = 2 OPTION( 7) = 'JAVASAL ' ; it(2* 7) = 2 OPTION( 8) = 'IFIXEDWEIRSCHEME ' ; it(2* 8) = 2 OPTION( 9) = 'Tsigma ' ; it(2* 9) = 6 OPTION(10) = 'Local timestepping ' ; it(2*10) = 2 OPTION(11) = 'Cffacver ' ; it(2*11) = 6 OPTION(12) = 'Javatem ' ; it(2*12) = 2 OPTION(13) = 'Javiuplus3D ' ; it(2*13) = 2 OPTION(14) = 'Jaqaisq1 ' ; it(2*14) = 2 ! 123456789012345678901234567890123456789012345678901234567890 ! 1 2 3 4 5 6 HELPM ( 1) = '0=no, 1 = constant, 2 = algebraic, 3 = k-eps, 4 = k-tau ' HELPM ( 2) = '0123 ' HELPM ( 3) = '-2, 0 ' HELPM ( 4) = '0 = NO, 3 = VERT IMPL, HOR EXPL ' HELPM ( 5) = '0 = no, 1 = eckardt ' HELPM ( 6) = '0 = no, 1 = YES ' HELPM ( 7) = '0=No, 1=Upwe, 2=Cente, 3=Upwi, 4=Centi, 5=4,3, 6=MCexpl ' HELPM ( 8) = '0=No, 6=subgrid, 7=rajaratnam, 8=Tabelb, 9=Willemontenotyet ' HELPM ( 9) = 'Sigma adaptation timescale, only for layertype == 4 ' HELPM (10) = '1 = yes, 0 = no ' HELPM (11) = '0=never switch off ho term vertical ' HELPM (12) = '0=No, 1=Upwe, 2=Cente, 3=Upwi, 4=Centi, 5=4,3, 6=MCexpl ' HELPM (13) = '0=no, 1 = yes ' HELPM (14) = '0=no, 1 = yes ' CALL SAVEKEYS() NUMPARACTUAL = NUMPAR NUMFLDACTUAL = 2*NUMPARACTUAL IR = 0 DO I = 1,NUMPARACTUAL IL = IR + 1 IR = IL + 1 IX(IL) = 13 IX(IR) = 95 IY(IL) = 2*I IY(IR) = 2*I IS(IL) = 82 IS(IR) = 10 IT(IL) = 1001 ENDDO ! Initialise CALL IWinWordWrap('OFF') CALL ITEXTCOLOURN(HLPFOR, HLPBCK) CALL INHIGHLIGHT('WHITE','RED') IW = NPOS(3) IXP = NPOS(1) + (IWS-IW)/2 IYP = NPOS(2) IH = IHS - 9 ! Header of filewindow CALL IWinAction('FPC') CALL IWinOpen(IXP,IYP,IW,1) CALL ITEXTCOLOURN(LBLFOR,LBLBCK) CALL IWinOutCentre(1,trim(unstruc_company)//'-'//trim(unstruc_program) // ' PARAMETER FORM') CALL ITEXTCOLOURN(HLPFOR,HLPBCK) ! ! Explain keyfunctions in bottom window CALL IWinAction('FPC') CALL IWinOpen(IXP,IHS-1,IW,2) CALL IWinOutStringXY(1,1,'move = ., Tab, confirm = Enter, no change = Esc, help = F3') CALL IWinOutStringXY(1,2,'right mouse = Enter, click outside window = Esc') ! Filewindow is middelste window CALL IWinAction('FPC') CALL IWinOpen(IXP,IYP+3,IW,IH) CALL InControlKey(29,129) CALL InControlKey(30,128) ! NUMWNH = InfoWindow(1) ! CALL IWinSelect(NUMWNH) ! Define a new form by supplying arrays containing ! field positions, sizes and types CALL IFORMDEFINE('W',NUMFLDACTUAL,IX,IY,IS,IT) ! Define a help field and define help strings ! for 2 of the 4 input fields CALL IFORMHELP(13,IH,60) IR = 0 DO I = 1,NUMPARACTUAL IL = IR + 1 IR = IL + 1 CALL IFORMPUTSTRING (IL,OPTION(I)) CALL IFORMPUTHELP (IR,HELPM(I)) CALL IFORMATTRIBUTEN(IR,0,0,7) ENDDO CALL IFormPutINTEGER (2* 1 ,ITURBULENCEMODEL ) CALL IFORMPUTINTEGER (2* 2 ,JAUSTARINT ) CALL IFORMPUTINTEGER (2* 3 ,jabaroctimeint ) CALL IFORMPUTINTEGER (2* 4 ,JAVAKEPS ) CALL IFORMPUTINTEGER (2* 5 ,IDENSFORM ) CALL IFORMPUTINTEGER (2* 6 ,JARHOXU ) CALL IFORMPUTINTEGER (2* 7 ,JAVASAL ) CALL IFORMPUTINTEGER (2* 8 ,ifixedweirscheme ) CALL IFORMPUTdouble (2* 9 ,Tsigma , '(F7.1)' ) CALL IFORMPUTINTEGER (2*10 ,JALTS ) CALL IFORMPUTdouble (2*11 ,Cffacver , '(F7.3)' ) CALL IFORMPUTINTEGER (2*12 ,JAVATEM ) CALL IFORMputINTEGER (2*13 ,javiuplus3D ) CALL IFORMputINTEGER (2*14 ,jaqaisq1 ) ! Display the form with numeric fields left justified ! and set the initial field to number 2 CALL IOUTJUSTIFYNUM('L') IFEXIT = 2 call IFormAttribute(IFEXIT-1, 'BU', ' ', ' ') CALL IFORMSHOW() 30 CONTINUE IFINIT = IFEXIT CALL IFormEditUser(IFINIT, IFEXIT, highlight_form_line) ! check for Help, Confirm, Quit KEY = INFOINPUT(55) IF (KEY .EQ. -2) THEN NBUT = INFOINPUT(61) IF (NBUT .GE. 1) THEN IMP = INFOINPUT(62) + 1 INP = INFOINPUT(63) + 1 IF (IMP .GE. IXP .AND. IMP .LT. IXP+IW .AND. & INP .GE. IYP+3 .AND. INP .LT. IYP+IH+3+2 ) THEN IF (NBUT .EQ. 1) THEN KEY = 21 ELSE KEY = 22 ENDIF ELSE KEY = 23 ENDIF ENDIF ELSE IF (KEY .EQ. -1) THEN KEY = INFOINPUT(57) ENDIF IF (KEY .EQ. 26) THEN WRDKEY = OPTION(IFEXIT/2) CALL HELP(WRDKEY,NLEVEL) ELSE IF (KEY .EQ. 22 .OR. KEY .EQ. 23) THEN IF (KEY .EQ. 22) THEN CALL IFORMGETINTEGER (2* 1 ,ITURBULENCEMODEL ) CALL IFORMGETINTEGER (2* 2 ,JAUSTARINT ) CALL IFORMGETINTEGER (2* 3 ,jabaroctimeint ) CALL IFORMGETINTEGER (2* 4 ,JAVAKEPS ) CALL IFORMGETINTEGER (2* 5 ,IDENSFORM ) CALL IFORMGETINTEGER (2* 6 ,JARHOXU ) CALL IFORMGETINTEGER (2* 7 ,JAVASAL ) CALL IFORMGETINTEGER (2* 8 ,IFIXEDWEIRSCHEME ) CALL IFORMGETdouble (2* 9 ,Tsigma ) CALL IFORMGETINTEGER (2*10 ,JALTS ) CALL IFORMGETdouble (2*11 ,Cffacver ) CALL IFORMGETINTEGER (2*12 ,JAVATEM ) CALL IFORMGETINTEGER (2*13 ,javiuplus3D ) CALL IFORMGETINTEGER (2*14 ,jaqaisq1 ) ENDIF CALL IWinClose(1) CALL IWinClose(1) CALL IWinClose(1) CALL RESTOREKEYS() RETURN ELSE IF (KEY .EQ. 21) THEN IF (IFEXIT .EQ. 1 .OR. IFEXIT .EQ. 3) THEN WRDKEY = HELPM(IFEXIT) CALL HELP(WRDKEY,NLEVEL) ENDIF ENDIF GOTO 30 END SUBROUTINE CHANGENUMERICALPARAMETERS2 SUBROUTINE CHANGETIMEPARAMETERS() USE M_FLOWTIMES use unstruc_display use unstruc_version_module, only : unstruc_company, unstruc_program use unstruc_messages implicit none integer :: numpar, numfld, numparactual, numfldactual PARAMETER (NUMPAR = 11, NUMFLD = 2*NUMPAR) INTEGER IX(NUMFLD),IY(NUMFLD),IS(NUMFLD),IT(NUMFLD) CHARACTER WRDKEY*40, OPTION(NUMPAR)*40, HELPM(NUMPAR)*60 integer :: nlevel COMMON /HELPNOW/ WRDKEY,NLEVEL integer, external :: infoinput external :: highlight_form_line ! integer :: ir, il, iw, ixp, iyp, ih, i, iuvfieldorg, ifexit, ifinit, key integer :: nbut, imp, inp NLEVEL = 4 OPTION( 1) = 'Dt_user (s) ' ; it(2*1) = 6 OPTION( 2) = 'Dt_max (s) ' ; it(2*2) = 6 OPTION( 3) = 'Use automatic time step or not (1/0)( ) ' ; it(2*3) = 2 OPTION( 4) = 'Tstart_user (s) ' ; it(2*4) = 6 OPTION( 5) = 'Tstop_user (s) ' ; it(2*5) = 6 OPTION( 6) = 'HisInterval (s) ' ; it(2*6) = 6 OPTION( 7) = 'MapInterval (s) ' ; it(2*7) = 6 OPTION( 8) = 'RstInterval (s) ' ; it(2*8) = 6 OPTION( 9) = 'WaqInterval (s) ' ; it(2*9) = 6 OPTION(10) = 'Initial timestep (s) ' ; it(2*10) = 6 OPTION(11) = 'Current time (s) ' ; it(2*11) = 6 ! 123456789012345678901234567890123456789012345678901234567890 ! 1 2 3 4 5 6 HELPM ( 1) = 'User timestep (rythm of external forcing updates) ' HELPM ( 2) = 'Max timestep ' HELPM ( 3) = 'Use automatic time step (CFL-based) or not (1 or 0) ' HELPM ( 4) = ' ' HELPM ( 5) = ' ' HELPM ( 6) = ' ' HELPM ( 7) = ' ' HELPM ( 8) = ' ' HELPM ( 9) = ' ' HELPM (10) = ' ' HELPM (11) = ' ' CALL SAVEKEYS() NUMPARACTUAL = NUMPAR NUMFLDACTUAL = 2*NUMPARACTUAL IR = 0 DO I = 1,NUMPARACTUAL IL = IR + 1 IR = IL + 1 IX(IL) = 13 IX(IR) = 95 IY(IL) = 2*I IY(IR) = 2*I IS(IL) = 82 IS(IR) = 10 IT(IL) = 1001 ENDDO ! Initialise CALL IWinWordWrap('OFF') CALL ITEXTCOLOURN(HLPFOR, HLPBCK) CALL INHIGHLIGHT('WHITE','RED') IW = NPOS(3) IXP = NPOS(1) + (IWS-IW)/2 IYP = NPOS(2) IH = IHS - 9 ! Header of filewindow CALL IWinAction('FPC') CALL IWinOpen(IXP,IYP,IW,1) CALL ITEXTCOLOURN(LBLFOR,LBLBCK) CALL IWinOutCentre(1,trim(unstruc_company)//'-'//trim(unstruc_program) // ' PARAMETER FORM') CALL ITEXTCOLOURN(HLPFOR,HLPBCK) ! ! Explain keyfunctions in bottom window CALL IWinAction('FPC') CALL IWinOpen(IXP,IHS-1,IW,2) CALL IWinOutStringXY(1,1,'move = ., Tab, confirm = Enter, no change = Esc, help = F3') CALL IWinOutStringXY(1,2,'right mouse = Enter, click outside window = Esc') ! Filewindow is middelste window CALL IWinAction('FPC') CALL IWinOpen(IXP,IYP+3,IW,IH) CALL InControlKey(29,129) CALL InControlKey(30,128) ! NUMWNH = InfoWindow(1) ! CALL IWinSelect(NUMWNH) ! Define a new form by supplying arrays containing ! field positions, sizes and types CALL IFORMDEFINE('W',NUMFLDACTUAL,IX,IY,IS,IT) ! Define a help field and define help strings ! for 2 of the 4 input fields CALL IFORMHELP(13,IH,60) IR = 0 DO I = 1,NUMPARACTUAL IL = IR + 1 IR = IL + 1 CALL IFORMPUTSTRING (IL,OPTION(I)) CALL IFORMPUTHELP (IR,HELPM(I)) CALL IFORMATTRIBUTEN(IR,0,0,7) ENDDO CALL IFormPutDouble (2* 1 ,dt_user , '(F8.2)') CALL IFormPutDouble (2* 2 ,dt_max , '(F8.2)') CALL IFORMPUTINTEGER (2* 3 ,ja_timestep_auto ) CALL IFormPutDouble (2* 4 ,tstart_user ,'(F10.0)') CALL IFormPutDouble (2* 5 ,tstop_user ,'(F10.0)') CALL IFormPutDouble (2* 6 ,ti_his ,'(F10.2)') CALL IFormPutDouble (2* 7 ,ti_map ,'(F10.2)') CALL IFormPutDouble (2* 8 ,ti_rst ,'(F10.2)') CALL IFormPutDouble (2* 9 ,ti_waq ,'(F10.2)') CALL IFormPutDouble (2*10 ,dt_init ,'(F10.0)') CALL IFormPutDouble (2*11 ,time1 ,'(F10.0)') ! Display the form with numeric fields left justified ! and set the initial field to number 2 CALL IOUTJUSTIFYNUM('L') IFEXIT = 2 call IFormAttribute(IFEXIT-1, 'BU', ' ', ' ') CALL IFORMSHOW() 30 CONTINUE IFINIT = IFEXIT CALL IFormEditUser(IFINIT, IFEXIT, highlight_form_line) ! check for Help, Confirm, Quit KEY = INFOINPUT(55) IF (KEY .EQ. -2) THEN NBUT = INFOINPUT(61) IF (NBUT .GE. 1) THEN IMP = INFOINPUT(62) + 1 INP = INFOINPUT(63) + 1 IF (IMP .GE. IXP .AND. IMP .LT. IXP+IW .AND. & INP .GE. IYP+3 .AND. INP .LT. IYP+IH+3+2 ) THEN IF (NBUT .EQ. 1) THEN KEY = 21 ELSE KEY = 22 ENDIF ELSE KEY = 23 ENDIF ENDIF ELSE IF (KEY .EQ. -1) THEN KEY = INFOINPUT(57) ENDIF IF (KEY .EQ. 26) THEN WRDKEY = OPTION(IFEXIT/2) CALL HELP(WRDKEY,NLEVEL) ELSE IF (KEY .EQ. 22 .OR. KEY .EQ. 23) THEN IF (KEY .EQ. 22) THEN CALL IFormGetDouble (2* 1 ,dt_user ) CALL IFormGetDouble (2* 2 ,dt_max ) CALL IFORMgeTINTEGER (2* 3 ,ja_timestep_auto ) CALL IFormGetDouble (2* 4 ,tstart_user ) CALL IFormGetDouble (2* 5 ,tstop_user ) CALL IFormGetDouble (2* 6 ,ti_his ) CALL IFormGetDouble (2* 7 ,ti_map ) CALL IFormGetDouble (2* 8 ,ti_rst ) CALL IFormGetDouble (2* 9 ,ti_waq ) CALL IFormGetDouble (2*10 ,dt_init ) if (dt_max > dt_user) then dt_max = dt_user write(msgbuf, '(a,f9.6,a)') 'DtMax should be <= DtUser. It has been reset to: ', dt_max call msg_flush() end if ENDIF CALL IWinClose(1) CALL IWinClose(1) CALL IWinClose(1) CALL RESTOREKEYS() RETURN ELSE IF (KEY .EQ. 21) THEN IF (IFEXIT .EQ. 1 .OR. IFEXIT .EQ. 3) THEN WRDKEY = HELPM(IFEXIT) CALL HELP(WRDKEY,NLEVEL) ENDIF ENDIF GOTO 30 END SUBROUTINE CHANGETIMEPARAMETERS SUBROUTINE CHANGEPHYSICALPARAMETERS() use m_netw USE M_FLOW use m_flowgeom USE M_FLOWTIMES USE m_sferic use m_wind use unstruc_display use unstruc_version_module, only : unstruc_company, unstruc_program implicit none integer :: numpar, numfld, numparactual, numfldactual PARAMETER (NUMPAR = 11, NUMFLD = 2*NUMPAR) INTEGER IX(NUMFLD),IY(NUMFLD),IS(NUMFLD),IT(NUMFLD) CHARACTER WRDKEY*40, OPTION(NUMPAR)*40, HELPM(NUMPAR)*60 integer :: nlevel COMMON /HELPNOW/ WRDKEY,NLEVEL integer, external :: infoinput external :: highlight_form_line ! integer :: ir, il, iw, ixp, iyp, ih, i, iuvfieldorg, ifexit, ifinit, key integer :: nbut, imp, inp double precision :: frcuniorg NLEVEL = 4 OPTION( 1) = 'frcuni ' ; it(2* 1) = 6 OPTION( 2) = 'ifrctypuni Friction formulation ' ; it(2* 2) = 2 OPTION( 3) = 'Windspeed (m/s) ' ; it(2* 3) = 6 OPTION( 4) = 'Winddirection ( ) 90= to East 0=to North' ; it(2* 4) = 6 OPTION( 5) = 'vicouv (m2/s) ' ; it(2* 5) = 6 OPTION( 6) = 'Vicoww (m2/s) ' ; it(2* 6) = 6 OPTION( 7) = 'Dicouv ( ) ' ; it(2* 7) = 6 OPTION( 8) = 'Dicoww ( ) ' ; it(2* 8) = 6 OPTION( 9) = 'Verticall Wall Nikuradse (m) ' ; it(2* 9) = 6 OPTION(10) = 'Smagorinsky ( ) ' ; it(2*10) = 6 OPTION(11) = 'Elder ( ) ' ; it(2*11) = 6 ! 123456789012345678901234567890123456789012345678901234567890 ! 1 2 3 4 5 6 HELPM ( 1) = 'uniform friction coefficient ' HELPM ( 2) = ' 0=Chz, 1=Mann, 2=White-Col, 3=z0, 10=Glass ' HELPM ( 3) = ' ' HELPM ( 4) = ' ' HELPM ( 5) = 'background horizontal viscosity ' HELPM ( 6) = 'background vertical viscosity (0: no vert. visc. at all) ' HELPM ( 7) = 'background horizontal diffusivity ' HELPM ( 8) = 'background vertical diffusivity (0: no vert. diff. at all)' HELPM ( 9) = 'VERTICAL WALL NIKURADSE ROUGHNESS, (wall_z0 = KS/30) (M)' HELPM (10) = 'vicuv = vicuv + ( (Smagorinsky*dx)**2)*Strainrate_S, eg 0.1 ' HELPM (11) = 'vicuv = vicuv + Elder*0.009*H*U eg 1.0 ' CALL SAVEKEYS() NUMPARACTUAL = NUMPAR NUMFLDACTUAL = 2*NUMPARACTUAL IR = 0 DO I = 1,NUMPARACTUAL IL = IR + 1 IR = IL + 1 IX(IL) = 13 IX(IR) = 95 IY(IL) = 2*I IY(IR) = 2*I IS(IL) = 82 IS(IR) = 10 IT(IL) = 1001 ENDDO ! Initialise CALL IWinWordWrap('OFF') CALL ITEXTCOLOURN(HLPFOR, HLPBCK) CALL INHIGHLIGHT('WHITE','RED') IW = NPOS(3) IXP = NPOS(1) + (IWS-IW)/2 IYP = NPOS(2) IH = IHS - 9 ! Header of filewindow CALL IWinAction('FPC') CALL IWinOpen(IXP,IYP,IW,1) CALL ITEXTCOLOURN(LBLFOR,LBLBCK) CALL IWinOutCentre(1,trim(unstruc_company)//'-'//trim(unstruc_program)// ' PARAMETER FORM') CALL ITEXTCOLOURN(HLPFOR,HLPBCK) ! ! Explain keyfunctions in bottom window CALL IWinAction('FPC') CALL IWinOpen(IXP,IHS-1,IW,2) CALL IWinOutStringXY(1,1,'move = ., Tab, confirm = Enter, no change = Esc, help = F3') CALL IWinOutStringXY(1,2,'right mouse = Enter, click outside window = Esc') ! Filewindow is middelste window CALL IWinAction('FPC') CALL IWinOpen(IXP,IYP+3,IW,IH) CALL InControlKey(29,129) CALL InControlKey(30,128) ! NUMWNH = InfoWindow(1) ! CALL IWinSelect(NUMWNH) ! Define a new form by supplying arrays containing ! field positions, sizes and types CALL IFORMDEFINE('W',NUMFLDACTUAL,IX,IY,IS,IT) ! Define a help field and define help strings ! for 2 of the 4 input fields CALL IFORMHELP(13,IH,60) IR = 0 DO I = 1,NUMPARACTUAL IL = IR + 1 IR = IL + 1 CALL IFORMPUTSTRING (IL,OPTION(I)) CALL IFORMPUTHELP (IR,HELPM(I)) CALL IFORMATTRIBUTEN(IR,0,0,7) ENDDO frcuniorg = frcuni CALL IFormPutDouble (2* 1 , frcuni, '(F8.3)') CALL IFORMPUTinteger (2* 2 , ifrctypuni ) CALL IFormPutDouble (2* 3 , windsp ,'(F8.3)') CALL IFormPutDouble (2* 4 , winddir,'(F8.3)') CALL IFormPutDouble (2* 5 , vicouv ,'(e8.3)') CALL IFormPutDouble (2* 6 , vicoww ,'(e8.3)') CALL IFORMPUTdouble (2* 7 , dicouv, '(e8.3)') CALL IFORMPUTdouble (2* 8 , dicoww, '(e8.3)') CALL IFormPutDouble (2* 9 , wall_ks,'(F8.3)') CALL IFormPutDouble (2*10 , Smagorinsky,'(F8.3)' ) CALL IFormPutDouble (2*11 , Elder, '(F8.3)' ) ! Display the form with numeric fields left justified ! and set the initial field to number 2 CALL IOUTJUSTIFYNUM('L') IFEXIT = 2 call IFormAttribute(IFEXIT-1, 'BU', ' ', ' ') CALL IFORMSHOW() 30 CONTINUE IFINIT = IFEXIT CALL IFormEditUser(IFINIT, IFEXIT, highlight_form_line) ! check for Help, Confirm, Quit KEY = INFOINPUT(55) IF (KEY .EQ. -2) THEN NBUT = INFOINPUT(61) IF (NBUT .GE. 1) THEN IMP = INFOINPUT(62) + 1 INP = INFOINPUT(63) + 1 IF (IMP .GE. IXP .AND. IMP .LT. IXP+IW .AND. & INP .GE. IYP+3 .AND. INP .LT. IYP+IH+3+2 ) THEN IF (NBUT .EQ. 1) THEN KEY = 21 ELSE KEY = 22 ENDIF ELSE KEY = 23 ENDIF ENDIF ELSE IF (KEY .EQ. -1) THEN KEY = INFOINPUT(57) ENDIF IF (KEY .EQ. 26) THEN WRDKEY = OPTION(IFEXIT/2) CALL HELP(WRDKEY,NLEVEL) ELSE IF (KEY .EQ. 22 .OR. KEY .EQ. 23) THEN IF (KEY .EQ. 22) THEN CALL IFormGetDouble (2* 1 , frcuni ) CALL IFORMGETinteger (2* 2 , ifrctypuni) CALL IFormGetDouble (2* 3 , windsp ) CALL IFormGetDouble (2* 4 , winddir) CALL IFormGetDouble (2* 5 , vicouv ) CALL IFormGetDouble (2* 6 , vicoww ) CALL IFORMGetdouble (2* 7 , dicouv ) CALL IFORMGetdouble (2* 8 , dicoww ) CALL IFormGetDouble (2* 9 , wall_ks) CALL IFormGetDouble (2*10 , Smagorinsky) CALL IFormGetDouble (2*11 , Elder) if (frcuniorg .ne. frcuni) then frcu = frcuni endif wall_z0 = wall_ks / 30d0 if (windsp .ne. 0d0) then call setuniformwind() endif ENDIF CALL IWinClose(1) CALL IWinClose(1) CALL IWinClose(1) CALL RESTOREKEYS() RETURN ELSE IF (KEY .EQ. 21) THEN IF (IFEXIT .EQ. 1 .OR. IFEXIT .EQ. 3) THEN WRDKEY = HELPM(IFEXIT) CALL HELP(WRDKEY,NLEVEL) ENDIF ENDIF GOTO 30 END SUBROUTINE CHANGEPHYSICALPARAMETERS SUBROUTINE CHANGEgeometryPARAMETERS() use m_netw USE M_FLOW use m_flowgeom USE M_FLOWTIMES USE m_sferic use m_wind use unstruc_display use m_fixedweirs use unstruc_version_module, only : unstruc_company, unstruc_program implicit none integer :: numpar, numfld, numparactual, numfldactual PARAMETER (NUMPAR = 24, NUMFLD = 2*NUMPAR) INTEGER IX(NUMFLD),IY(NUMFLD),IS(NUMFLD),IT(NUMFLD) CHARACTER WRDKEY*40, OPTION(NUMPAR)*40, HELPM(NUMPAR)*60 integer :: nlevel COMMON /HELPNOW/ WRDKEY,NLEVEL integer, external :: infoinput external :: highlight_form_line ! integer :: ir, il, iw, ixp, iyp, ih, i, iuvfieldorg, ifexit, ifinit, key integer :: nbut, imp, inp double precision :: sqbamin NLEVEL = 4 OPTION( 1)= 'sini (m) ' ; it(2* 1) = 6 OPTION( 2)= 'zkuni (m) ' ; it(2* 2) = 6 OPTION( 3)= 'numtopsig ( ) ' ; it(2* 3) = 2 OPTION( 4)= 'anglat (deg) ' ; it(2* 4) = 6 OPTION( 5)= 'ibedlevtyp ( ) ' ; it(2* 5) = 2 OPTION( 6)= 'Kmx, nr of Vertical sigma layers ( ) ' ; it(2* 6) = 2 OPTION( 7)= 'Jahazlayer ( ) ' ; it(2* 7) = 2 OPTION( 8)= 'Anti Creep ( ) ' ; it(2* 8) = 2 OPTION( 9)= 'sqrt of minimum cell surface area (m ) ' ; it(2* 9) = 6 OPTION(10)= 'minimum link length (m ) ' ; it(2*10) = 6 OPTION(11)= 'Uniform 1D link widt (m ) ' ; it(2*11) = 6 OPTION(12)= '1D profile type ( ) ' ; it(2*12) = 2 OPTION(13)= '2D conveyance ( ) ' ; it(2*13) = 2 OPTION(14)= 'non linear continuity 2D ( ) ' ; it(2*14) = 2 OPTION(15)= 'ibedlevtyp1D ( ) ' ; it(2*15) = 2 OPTION(16)= 'sdropstep when dropping water (m) ' ; it(2*16) = 6 OPTION(17)= 'zkdropstep when dropping land (m) ' ; it(2*17) = 6 OPTION(18)= 'Ifixedweirscheme ( ) ' ; it(2*18) = 2 OPTION(19)= 'Layertype ( ) ' ; it(2*19) = 2 OPTION(20)= 'Sigmagrowthfactor ( ) ' ; it(2*20) = 6 OPTION(21)= 'Sillheightmin ( ) ' ; it(2*21) = 6 OPTION(22)= 'Mxlayz nr of vertical z-layers ( ) ' ; it(2*22) = 2 OPTION(23)= 'Jaembed1D ( ) ' ; it(2*23) = 2 OPTION(24)= 'Output full time-varying grid data ( ) ' ; it(2*24) = 2 ! 123456789012345678901234567890123456789012345678901234567890 ! 1 2 3 4 5 6 HELPM (1) = 'initial waterlevel ' HELPM (2) = 'uniform bottom level ' HELPM (3) = 'number of sigma top layers in Z-model ' HELPM (4) = 'angle of latitude, Delft = 52.0 ' HELPM (5) = '1=cell tiledep bl, 2=u-point blu, 3=netw,mean-u 4=netw, maxu' HELPM (6) = '0=2D ORIGINAL CODE, 1=2D IN 3D CODE, >1= 3D CODE ' HELPM (7) = '1=orig, 2=sigma-like ' !HELPM (7) = '0=D3D, 0.5dx outside, 1=on net bnd, 2=on polylin (not yet) ' HELPM (8) = '1=Yes, 0=No ' HELPM (9) = 'sqrt(bamin) ' HELPM (10)= 'dxmin ' HELPM (11)= 'wu1DUNI ' HELPM (12)= '1=circle, 2=rectan, 3=rectan (peri=wid), 4=3,nonlin ' HELPM (13)= '0:R=H, 1:R=A/P, 2:K=analytic-1D conv, 3:K=analytic-2D conv ' HELPM (14)= 'only for ibedlevtyp==3 and 2D conveyance >=1 ' HELPM (15)= '1=cell tiledep bl, else =netw,mean-u ' HELPM (16)= 'Specify absolute value for dropping water. ' HELPM (17)= 'Specify absolute value for dropping land. ' HELPM (18)= '0=only setbobs, 1=small stencil, 2=full subgrid weir ' HELPM (19)= '0=all sigma, 2=all z, 3=left sigma, 4=left z ' HELPM (20)= '1d0=uniform, 1.1d0 = increase factor from bottom up ' HELPM (21)= 'Only Fixedweirs if both left and right sillheight > Sillmin ' HELPM (22)= 'max nr of z-layers ' HELPM (23)= '1 : use embedded 1d channels, 2=idem, non-linear cont. ' HELPM (24)= '0=compact, 1=full ' CALL SAVEKEYS() NUMPARACTUAL = NUMPAR NUMFLDACTUAL = 2*NUMPARACTUAL IR = 0 DO I = 1,NUMPARACTUAL IL = IR + 1 IR = IL + 1 IX(IL) = 13 IX(IR) = 95 IY(IL) = 2*I IY(IR) = 2*I IS(IL) = 82 IS(IR) = 10 IT(IL) = 1001 ENDDO ! Initialise CALL IWinWordWrap('OFF') CALL ITEXTCOLOURN(HLPFOR, HLPBCK) CALL INHIGHLIGHT('WHITE','RED') IW = NPOS(3) IXP = NPOS(1) + (IWS-IW)/2 IYP = NPOS(2) IH = IHS - 9 ! Header of filewindow CALL IWinAction('FPC') CALL IWinOpen(IXP,IYP,IW,1) CALL ITEXTCOLOURN(LBLFOR,LBLBCK) CALL IWinOutCentre(1,trim(unstruc_company)//'-'//trim(unstruc_program)// ' PARAMETER FORM') CALL ITEXTCOLOURN(HLPFOR,HLPBCK) ! ! Explain keyfunctions in bottom window CALL IWinAction('FPC') CALL IWinOpen(IXP,IHS-1,IW,2) CALL IWinOutStringXY(1,1,'move = ., Tab, confirm = Enter, no change = Esc, help = F3') CALL IWinOutStringXY(1,2,'right mouse = Enter, click outside window = Esc') ! Filewindow is middelste window CALL IWinAction('FPC') CALL IWinOpen(IXP,IYP+3,IW,IH) CALL InControlKey(29,129) CALL InControlKey(30,128) ! NUMWNH = InfoWindow(1) ! CALL IWinSelect(NUMWNH) ! Define a new form by supplying arrays containing ! field positions, sizes and types CALL IFORMDEFINE('W',NUMFLDACTUAL,IX,IY,IS,IT) ! Define a help field and define help strings ! for 2 of the 4 input fields CALL IFORMHELP(13,IH,60) IR = 0 DO I = 1,NUMPARACTUAL IL = IR + 1 IR = IL + 1 CALL IFORMPUTSTRING (IL,OPTION(I)) CALL IFORMPUTHELP (IR,HELPM(I)) CALL IFORMATTRIBUTEN(IR,0,0,7) ENDDO CALL IFormPutDouble (2*1 ,sini, '(F8.3)') CALL IFormPutDouble (2*2 ,zkuni, '(F8.3)') CALL IFormPutInteger (2*3 ,numtopsig ) CALL IFormPutDouble (2*4 ,anglat, '(F8.3)') CALL IFORMPUTINTEGER (2*5 ,ibedlevtyp ) CALL IFORMPUTINTEGER (2*6 ,kmx ) CALL IFORMPUTINTEGER (2*7 ,Jahazlayer ) CALL IFORMPUTINTEGER (2*8 ,jacreep ) sqbamin = sqrt(bamin) CALL IFORMPUTdouble (2*9 ,sqbamin, '(F8.3)' ) CALL IFORMPUTdouble (2*10,dxmin, '(F8.3)' ) CALL IFORMPUTdouble (2*11,wu1DUNI , '(F8.3)' ) CALL IFORMPUTINTEGER (2*12,iproftypuni ) CALL IFORMPUTINTEGER (2*13,jaconveyance2D ) CALL IFORMPUTINTEGER (2*14,nonlin2D ) CALL IFORMPUTINTEGER (2*15,ibedlevtyp1D ) CALL IFormPutDouble (2*16,sdropstep, '(F8.3)') CALL IFormPutDouble (2*17,zkdropstep, '(F8.3)') CALL IFORMPUTINTEGER (2*18,ifixedweirscheme ) CALL IFORMPUTINTEGER (2*19,Layertype ) CALL IFormPutDouble (2*20,Sigmagrowthfactor, '(F8.3)') CALL IFormPutDouble (2*21,Sillheightmin , '(F8.3)') CALL IFORMPUTINTEGER (2*22,Mxlayz ) CALL IFORMPUTINTEGER (2*23,Jaembed1D ) CALL IFORMPUTINTEGER (2*24,jafullgridoutput ) bamin = sqbamin*sqbamin ! Display the form with numeric fields left justified ! and set the initial field to number 2 CALL IOUTJUSTIFYNUM('L') IFEXIT = 2 call IFormAttribute(IFEXIT-1, 'BU', ' ', ' ') CALL IFORMSHOW() 30 CONTINUE IFINIT = IFEXIT CALL IFormEditUser(IFINIT, IFEXIT, highlight_form_line) ! check for Help, Confirm, Quit KEY = INFOINPUT(55) IF (KEY .EQ. -2) THEN NBUT = INFOINPUT(61) IF (NBUT .GE. 1) THEN IMP = INFOINPUT(62) + 1 INP = INFOINPUT(63) + 1 IF (IMP .GE. IXP .AND. IMP .LT. IXP+IW .AND. & INP .GE. IYP+3 .AND. INP .LT. IYP+IH+3+2 ) THEN IF (NBUT .EQ. 1) THEN KEY = 21 ELSE KEY = 22 ENDIF ELSE KEY = 23 ENDIF ENDIF ELSE IF (KEY .EQ. -1) THEN KEY = INFOINPUT(57) ENDIF IF (KEY .EQ. 26) THEN WRDKEY = OPTION(IFEXIT/2) CALL HELP(WRDKEY,NLEVEL) ELSE IF (KEY .EQ. 22 .OR. KEY .EQ. 23) THEN IF (KEY .EQ. 22) THEN CALL IFormGetDouble (2*1 ,sini ) CALL IFormGetDouble (2*2 ,zkuni ) CALL IFormGetinteger (2*3 ,numtopsig ) CALL IFormGetDouble (2*4 ,anglat ) CALL IFORMgeTINTEGER (2*5 ,ibedlevtyp ) CALL IFORMgeTINTEGER (2*6 ,kmx ) CALL IFORMgeTINTEGER (2*7 ,Jahazlayer ) CALL IFORMgeTINTEGER (2*8 ,jacreep ) CALL IFORMgetdouble (2*9 ,sqbamin ) CALL IFORMgetdouble (2*10,dxmin ) CALL IFORMgetdouble (2*11,wu1DUNI ) CALL IFORMgeTINTEGER (2*12,iproftypuni ) CALL IFORMgeTINTEGER (2*13,jaconveyance2D ) CALL IFORMgeTINTEGER (2*14,nonlin2D ) CALL IFORMgeTINTEGER (2*15,ibedlevtyp1D ) CALL IFormGetDouble (2*16,sdropstep) CALL IFormGetDouble (2*17,zkdropstep) CALL IFORMgeTINTEGER (2*18,ifixedweirscheme) CALL IFORMgeTINTEGER (2*19,Layertype ) CALL IFormGetDouble (2*20,Sigmagrowthfactor) CALL IFormGetDouble (2*21,Sillheightmin) CALL IFORMgetINTEGER (2*22,Mxlayz ) CALL IFORMgetINTEGER (2*23,Jaembed1D ) CALL IFORMgeTINTEGER (2*24,jafullgridoutput) if (kmx > 0 .or. mxlayz > 0) then if (layertype > 1) then kmx = max(kmx,mxlayz) ; iadvec = 33 endif endif if (kmx == 0) ja_timestep_auto = 1 if (ibedlevtyp .ne. 3) then jaconveyance2D = 0 nonlin2D = 0 else if (nonlin2d > 0 .and. jaconveyance2D == 0 ) then jaconveyance2D = 1 endif if (nonlin2d > 0) nonlin = 1 bamin = sqbamin*sqbamin call inisferic() ENDIF CALL IWinClose(1) CALL IWinClose(1) CALL IWinClose(1) CALL RESTOREKEYS() RETURN ELSE IF (KEY .EQ. 21) THEN IF (IFEXIT .EQ. 1 .OR. IFEXIT .EQ. 3) THEN WRDKEY = HELPM(IFEXIT) CALL HELP(WRDKEY,NLEVEL) ENDIF ENDIF GOTO 30 END SUBROUTINE CHANGEgeometryPARAMETERS SUBROUTINE CHANGEGRIDPARAMETERS() USE M_GRID USE M_GRIDSETTINGS use m_sferic use unstruc_display use unstruc_version_module, only : unstruc_company, unstruc_program implicit none integer :: numpar, numfld, numparactual, numfldactual PARAMETER (NUMPAR = 15, NUMFLD = 2*NUMPAR) INTEGER IX(NUMFLD),IY(NUMFLD),IS(NUMFLD),IT(NUMFLD) integer :: nlevel CHARACTER WRDKEY*40, OPTION(NUMPAR)*40, HELPM(NUMPAR)*60 COMMON /HELPNOW/ WRDKEY,NLEVEL integer, external :: infoinput external :: highlight_form_line ! integer :: ip,ir, il, iw, ixp, iyp, ih, i, iuvfieldorg, ifexit, ifinit, key integer :: nbut, imp, inp NLEVEL = 3 OPTION(1) = 'M-REFINEMENT FACTOR ' OPTION(2) = 'N-REFINEMENT FACTOR ' OPTION(3) = 'NR SMOOTHING ITERATIONS ' OPTION(4) = 'SMOOTHING PARAMETER ' OPTION(5) = 'ATTRACTION/REPULSION PARAMETER ' OPTION(6) = 'PASSIVE GRID OR GRID FIXED IN PASTE ' OPTION(7) = 'GO BACK TO STARTUP DIRECTORY YES/NO ' OPTION(8) = 'LINE OR SPLINE REPRESENTATION (0.0-1.0)' OPTION(9) = 'EQUIDISTANT OR SMOOTH INTERPOL (0.0-1.0)' OPTION(10)= 'INCREASE FACTOR IN LINE MIRROR (0.1-10)' OPTION(11)= 'Spherical or Cartesian coordinates (1 0)' OPTION(12)= 'DRAW STEREOGRAPHIC OR NO PROJECTION(1 0)' ! pillar grid option(13)= 'PILLAR RADIUS (m) ' option(14)= 'PILLAR X-COORDINATE ' option(15)= 'PILLAR Y-COORDINATE ' ! ! 123456789012345678901234567890123456789012345678901234567890 ! 1 2 3 4 5 6 HELPM (1) = 'INTEGER VALUE < ' HELPM (2) = 'INTEGER VALUE < ' HELPM (3) = 'SMOOTHING, EDIT : (0.0 - 100) DEFAULT = 20, INTERMEDIATE ' HELPM (4) = 'SMOOTHING EDIT : (0.0 - 1.0) DEFAULT = 0.2, INTERMEDIATE ' HELPM (5) = 'ATTRACT./REPULS. : (0.0 - 0.5) DEFAULT = 0.1, INTERMEDIATE ' HELPM (6) = 'GRID PASTE : (0.0 - 1.0) 0.0: GRID FIXED, 1.0:PASSIVE' HELPM (7) = 'ALWAYS BACK TO STARTUP DIRECTORY (1) OR KEEP NEW DIR. (0) ' HELPM (8) = 'STRAIGHT LINES REPRESENTATION = 0, CURVED LINES = 1 ' HELPM (9) = 'SPLINES TO GRID : (0.0 - 1.0) DEFAULT = 1.0, SMOOTH INTERP.' HELPM (10)= 'GRID SIZE INCREASE IN LINE MIRROR, 1.0 = EQUAL SIZE ' HELPM (11)= '1 = Spherical, 0 = Cartesian ' HELPM (12)= '1 = STEREOGRAPHIC PROJECTION , 0 = NO PROJECTION ' HELPM (13)= 'SET RADIUS TO 0 FOR NO PILLAR ' HELPM (14)= ' ' HELPM (14)= ' ' CALL SAVEKEYS() IP = 20 WRITE(HELPM(1)(IP:IP+4),'(I5)') MIN(MMAX-1, 1 + (MMAX-1)/MAX(1,(MC-1)) ) WRITE(HELPM(2)(IP:IP+4),'(I5)') MIN(NMAX-1, 1 + (NMAX-1)/MAX(1,(NC-1)) ) IF (JDEMO .EQ. 1) THEN NUMPARACTUAL = 6 ELSE NUMPARACTUAL = NUMPAR ENDIF NUMFLDACTUAL = 2*NUMPARACTUAL IR = 0 DO 10 I = 1,NUMPARACTUAL IL = IR + 1 IR = IL + 1 IX(IL) = 13 IX(IR) = 95 IY(IL) = 2*I IY(IR) = 2*I IS(IL) = 82 IS(IR) = 10 IT(IL) = 1001 IF (I .LE. 3 .OR. I == 7 .OR. I == 10 .OR. I == 11 .OR. I==12) THEN IT(IR) = 2 ELSE IT(IR) = 6 ENDIF 10 CONTINUE ! Initialise CALL IWinWordWrap('OFF') CALL ITEXTCOLOURN(HLPFOR, HLPBCK) CALL INHIGHLIGHT('WHITE','RED') IW = NPOS(3) IXP = NPOS(1) + (IWS-IW)/2 IYP = NPOS(2) IH = IHS - 9 ! Header of filewindow CALL IWinAction('FPC') CALL IWinOpen(IXP,IYP,IW,1) CALL ITEXTCOLOURN(LBLFOR,LBLBCK) CALL IWinOutCentre(1,trim(unstruc_company)//'-'//trim(unstruc_program)// ' PARAMETER FORM') CALL ITEXTCOLOURN(HLPFOR,HLPBCK) ! ! Explain keyfunctions in bottom window CALL IWinAction('FPC') CALL IWinOpen(IXP,IHS-1,IW,2) CALL IWinOutStringXY (1,1,'move = ., Tab, confirm = Enter, no change = Esc, help = F3') CALL IWinOutStringXY (1,2,'right mouse = Enter, click outside window = Esc') ! Filewindow is middelste window CALL IWinAction('FPC') CALL IWinOpen(IXP,IYP+3,IW,IH) CALL InControlKey(29,129) CALL InControlKey(30,128) ! NUMWNH = InfoWindow(1) ! CALL IWinSelect(NUMWNH) ! Define a new form by supplying arrays containing ! field positions, sizes and types CALL IFORMDEFINE('W',NUMFLDACTUAL,IX,IY,IS,IT) ! Define a help field and define help strings ! for 2 of the 4 input fields CALL IFORMHELP(13,IH,60) IR = 0 DO 20 I = 1,NUMPARACTUAL IL = IR + 1 IR = IL + 1 CALL IFORMPUTSTRING (IL,OPTION(I)) CALL IFORMPUTHELP (IR,HELPM(I)) CALL IFORMATTRIBUTEN(IR,0,0,7) 20 CONTINUE CALL IFORMPUTINTEGER(2*1,MFAC) CALL IFORMPUTINTEGER(2*2,NFAC) CALL IFORMPUTINTEGER(2*3,ITSMO) CALL IFormPutDouble (2*4,CSMO,'(F5.3)') CALL IFormPutDouble (2*5,RFAC,'(F5.3)') CALL IFormPutDouble (2*6,BAAS2,'(F5.3)') CALL IFORMPUTINTEGER(2*7,KEEPSTARTDIR) CALL IFormPutDouble (2*8,SPLFAC,'(F5.3)') CALL IFormPutDouble (2*9,SPLFAC2,'(F5.3)') CALL IFormPutDouble (2*10,FACMIR,'(F5.3)') CALL IFORMPUTINTEGER(2*11,jsferic) CALL IFORMPUTINTEGER(2*12,jsferTEK) CALL IFormPutDouble (2*13,pil_rad,'(F7.3)') CALL IFormPutDouble (2*14,pil_x, '(F7.3)') CALL IFormPutDouble (2*15,pil_y, '(F7.3)') ! Diplay the form with numeric fields left justified ! an set the initial field to number 2 CALL IOUTJUSTIFYNUM('L') IFEXIT = 2 call IFormAttribute(IFEXIT-1, 'BU', ' ', ' ') CALL IFORMSHOW() 30 CONTINUE IFINIT = IFEXIT CALL IFormEditUser(IFINIT, IFEXIT, highlight_form_line) ! check for Help, Confirm, Quit KEY = INFOINPUT(55) IF (KEY .EQ. -2) THEN NBUT = INFOINPUT(61) IF (NBUT .GE. 1) THEN IMP = INFOINPUT(62) + 1 INP = INFOINPUT(63) + 1 IF (IMP .GE. IXP .AND. IMP .LT. IXP+IW .AND. & INP .GE. IYP+3 .AND. INP .LT. IYP+IH+3+2 ) THEN IF (NBUT .EQ. 1) THEN KEY = 21 ELSE KEY = 22 ENDIF ELSE KEY = 23 ENDIF ENDIF ELSE IF (KEY .EQ. -1) THEN KEY = INFOINPUT(57) ENDIF IF (KEY .EQ. 26) THEN WRDKEY = OPTION(IFEXIT/2) CALL HELP(WRDKEY,NLEVEL) ELSE IF (KEY .EQ. 22 .OR. KEY .EQ. 23) THEN IF (KEY .EQ. 22) THEN CALL IFORMGETINTEGER(2*1,MFAC) CALL IFORMGETINTEGER(2*2,NFAC) CALL IFORMGETINTEGER(2*3,ITSMO) CALL IFormGetDouble (2*4,CSMO) CALL IFormGetDouble (2*5,RFAC) CALL IFormGetDouble (2*6,BAAS2) CALL IFORMGETINTEGER(2*7,KEEPSTARTDIR) CALL IFormGetDouble (2*8,SPLFAC) CALL IFormGetDouble (2*9,SPLFAC2) CALL IFormGetDouble (2*10,FACMIR) CALL IFORMGETINTEGER(2*11,jsferic) CALL IFORMGETINTEGER(2*12,jsferTEK) CALL IFormGetDouble (2*13,pil_rad) CALL IFormGetDouble (2*14,pil_x) CALL IFormGetDouble (2*15,pil_y) KEEPSTARTDIR = MAX(0,KEEPSTARTDIR) KEEPSTARTDIR = MIN(1,KEEPSTARTDIR) !MFAC = MAX(1,MFAC) !NFAC = MAX(1,NFAC) CSMO = MAX(0d0,CSMO) RFAC = MAX(0d0,RFAC) BAAS2 = MAX(0d0, MIN(BAAS2,1d0) ) SPLFAC= MAX(0d0, MIN(SPLFAC,1d0) ) SPLFAC2=MAX(0d0, MIN(SPLFAC2,1d0) ) FACMIR=MAX(0.1d0, MIN(FACMIR,10d0) ) jsferic = max(0,min(jsferic,1)) ENDIF CALL IWinClose(1) CALL IWinClose(1) CALL IWinClose(1) CALL RESTOREKEYS() RETURN ELSE IF (KEY .EQ. 21) THEN IF (IFEXIT .EQ. 1 .OR. IFEXIT .EQ. 3) THEN WRDKEY = HELPM(IFEXIT) CALL HELP(WRDKEY,NLEVEL) ENDIF ENDIF GOTO 30 END SUBROUTINE CHANGEGRIDPARAMETERS SUBROUTINE CHANGEINTERPOLATIONPARAMETERS() use m_INTERPOLATIONsettings use unstruc_display use unstruc_version_module, only : unstruc_company, unstruc_program implicit none integer :: numpar, numfld, numparactual, numfldactual PARAMETER (NUMPAR = 6, NUMFLD = 2*NUMPAR) INTEGER IX(NUMFLD),IY(NUMFLD),IS(NUMFLD),IT(NUMFLD) CHARACTER WRDKEY*40, OPTION(NUMPAR)*45, HELPM(NUMPAR)*60 integer :: nlevel COMMON /HELPNOW/ WRDKEY,NLEVEL integer, external :: infoinput external :: highlight_form_line ! integer :: ir, il, iw, ixp, iyp, ih, i, ifexit, ifinit, key integer :: nbut, imp, inp NLEVEL = 4 OPTION( 1) = 'INTERPOLATIONTYPE (1=TRI,2=AVE,3=CURV. TRI)' ; it(2* 1) = 2 OPTION( 2) = 'JTEKINTERPOLATIONPROCESS (0/1) ' ; it(2* 2) = 2 OPTION( 3) = 'IAV, AVERAGINGTYPE ' ; it(2* 3) = 2 OPTION( 4) = 'NUMMIN, MINUMUM NR OF POINTS IN AV ' ; it(2* 4) = 2 OPTION( 5) = 'RCEL, RELATIVE SEARCH CELL SIZE ' ; it(2* 5) = 6 OPTION( 6) = 'Interpolate_to , 1=bathy, 2=ZK, 3=S1, 4=ZC ' ; it(2* 6) = 2 ! 123456789012345678901234567890123456789012345678901234567890 ! 1 2 3 4 5 6 HELPM ( 1) = '1 = TRIANGULATION 2= CELL AVERAGING, 3=USE CURV.GRID FOR TRI' HELPM ( 2) = 'SHOW INTERPOLATION PROCESS 0-No, 1=Yes ' HELPM ( 3) = '1=AVER., 2=CLOSEST POINT, 3=MAX, 4=MIN, 5=INV. DIST. WEIGHT ' HELPM ( 4) = 'MINIMUM NR OF POINTS NEEDED INSIDE CELL TO HANDLE CELL ' HELPM ( 5) = 'DEFAULT 1.0 = ACTUAL CELL SIZE, 2.0 = TWICE AS LARGE ' HELPM ( 6) = '1=? , 2=network, 3=waterlevels, 4=curvigrid ' CALL SAVEKEYS() NUMPARACTUAL = NUMPAR NUMFLDACTUAL = 2*NUMPARACTUAL IR = 0 DO I = 1,NUMPARACTUAL IL = IR + 1 IR = IL + 1 IX(IL) = 13 IX(IR) = 95 IY(IL) = 2*I IY(IR) = 2*I IS(IL) = 82 IS(IR) = 10 IT(IL) = 1001 ENDDO ! Initialise CALL IWinWordWrap('OFF') CALL ITEXTCOLOURN(HLPFOR, HLPBCK) CALL INHIGHLIGHT('WHITE','RED') IW = NPOS(3) IXP = NPOS(1) + (IWS-IW)/2 IYP = NPOS(2) IH = IHS - 9 ! Header of filewindow CALL IWinAction('FPC') CALL IWinOpen(IXP,IYP,IW,1) CALL ITEXTCOLOURN(LBLFOR,LBLBCK) CALL IWinOutCentre(1,trim(unstruc_company)//'-'//trim(unstruc_program)// ' PARAMETER FORM') CALL ITEXTCOLOURN(HLPFOR,HLPBCK) ! ! Explain keyfunctions in bottom window CALL IWinAction('FPC') CALL IWinOpen(IXP,IHS-1,IW,2) CALL IWinOutStringXY(1,1,'move = ., Tab, confirm = Enter, no change = Esc, help = F3') CALL IWinOutStringXY(1,2,'right mouse = Enter, click outside window = Esc') ! Filewindow is middelste window CALL IWinAction('FPC') CALL IWinOpen(IXP,IYP+3,IW,IH) CALL InControlKey(29,129) CALL InControlKey(30,128) ! NUMWNH = InfoWindow(1) ! CALL IWinSelect(NUMWNH) ! Define a new form by supplying arrays containing ! field positions, sizes and types CALL IFORMDEFINE('W',NUMFLDACTUAL,IX,IY,IS,IT) ! Define a help field and define help strings ! for 2 of the 4 input fields CALL IFORMHELP(13,IH,60) IR = 0 DO I = 1,NUMPARACTUAL IL = IR + 1 IR = IL + 1 CALL IFORMPUTSTRING (IL,OPTION(I)) CALL IFORMPUTHELP (IR,HELPM(I)) CALL IFORMATTRIBUTEN(IR,0,0,7) ENDDO CALL IFormPutINTEGER (2* 1 , INTERPOLATIONTYPE ) CALL IFORMPUTinteger (2* 2 , JTEKINTERPOLATIONPROCESS ) CALL IFormPutINTEGER (2* 3 , IAV ) CALL IFormPutINTEGER (2* 4 , NUMMIN ) CALL IFormPutDouble (2* 5 , RCEL ,'(F8.3)') CALL IFormPutINTEGER (2* 6 , Interpolate_to ) ! Display the form with numeric fields left justified ! and set the initial field to number 2 CALL IOUTJUSTIFYNUM('L') IFEXIT = 2 call IFormAttribute(IFEXIT-1, 'BU', ' ', ' ') CALL IFORMSHOW() 30 CONTINUE IFINIT = IFEXIT CALL IFormEditUser(IFINIT, IFEXIT, highlight_form_line) ! check for Help, Confirm, Quit KEY = INFOINPUT(55) IF (KEY .EQ. -2) THEN NBUT = INFOINPUT(61) IF (NBUT .GE. 1) THEN IMP = INFOINPUT(62) + 1 INP = INFOINPUT(63) + 1 IF (IMP .GE. IXP .AND. IMP .LT. IXP+IW .AND. & INP .GE. IYP+3 .AND. INP .LT. IYP+IH+3+2 ) THEN IF (NBUT .EQ. 1) THEN KEY = 21 ELSE KEY = 22 ENDIF ELSE KEY = 23 ENDIF ENDIF ELSE IF (KEY .EQ. -1) THEN KEY = INFOINPUT(57) ENDIF IF (KEY .EQ. 26) THEN WRDKEY = OPTION(IFEXIT/2) CALL HELP(WRDKEY,NLEVEL) ELSE IF (KEY .EQ. 22 .OR. KEY .EQ. 23) THEN IF (KEY .EQ. 22) THEN CALL IFormGEtINTEGER (2* 1 , INTERPOLATIONTYPE ) CALL IFORMGETinteger (2* 2 , JTEKINTERPOLATIONPROCESS ) CALL IFormGEtINTEGER (2* 3 , IAV ) CALL IFormGEtINTEGER (2* 4 , NUMMIN ) CALL IFormGEtDouble (2* 5 , RCEL ) CALL IFormGEtINTEGER (2* 6 , Interpolate_to ) ENDIF CALL IWinClose(1) CALL IWinClose(1) CALL IWinClose(1) CALL RESTOREKEYS() RETURN ELSE IF (KEY .EQ. 21) THEN IF (IFEXIT .EQ. 1 .OR. IFEXIT .EQ. 3) THEN WRDKEY = HELPM(IFEXIT) CALL HELP(WRDKEY,NLEVEL) ENDIF ENDIF GOTO 30 END SUBROUTINE CHANGEINTERPOLATIONPARAMETERS SUBROUTINE TEKVEC(NSC,X,Y,U,V,X1,X2,Y1,Y2,NCOL,TITLE) implicit none double precision :: dx double precision :: dxh double precision :: dy double precision :: dyh integer, save :: ini = 0 integer :: ncol integer :: nsc integer :: numsc double precision :: psi0 double precision :: u double precision :: v double precision :: vfac double precision :: x double precision :: x1 double precision :: x1sc double precision :: x2 double precision :: x2sc double precision :: y double precision :: y1 double precision :: y1sc double precision :: y2 double precision :: y2sc CHARACTER TITLE*(*), TEX*8 COMMON /GSCREENS/ X1SC(100),Y1SC(100),X2SC(100),Y2SC(100),NUMSC INI = INI + 1 call viewport(real(X1SC(NSC)),real(Y1SC(NSC)),real(X2SC(NSC)),real(Y2SC(NSC) )) DX = (X2-X1)*0.1d0 DY = (Y2-Y1)*0.1d0 DXH = DX/2d0 DYH = DY/2d0 ! CALL IGRUNITS( real(X1-DX),real(Y1-DY),real(X2+DX),real(Y2+DY) ) CALL setwor( X1-DX, Y1-DY, X2+DX, Y2+DY ) VFAC = 10 PSI0 = 0 CALL SETCOL(NCOL) CALL ARROWS(X,Y,U,V,PSI0,VFAC) RETURN END SUBROUTINE TEKFN(NSC,NF,JW,X,Y,N,X1,X2,Y1,Y2,NCOL,TITLE,JAUTO,JP,DAG,kp) implicit none double precision :: dag double precision :: dv double precision :: dxh double precision :: dyh double precision :: f1 double precision :: f2 double precision :: fmx integer :: i, kp integer, save :: ini = 0 integer :: j integer :: jaauto integer :: jauto integer :: jp integer :: jw integer :: mx integer :: n integer :: ncol integer :: ncols integer :: nf integer :: nie integer :: nis integer :: nsc integer :: nv integer :: nx double precision :: val, fx1, fx2, fy1, fy2 double precision :: vmax double precision :: vmin double precision :: x1 double precision :: x2 double precision :: xo double precision :: xtx double precision :: y1 double precision :: y2 double precision :: yo double precision :: ytx, rc PARAMETER (MX= 366, NX=20) CHARACTER TITLE*(*), TEX*16 double precision :: X(N), Y(N), XX(4), YY(4), ZZ(4) COMMON /ORGARR/ XO(MX,NX), YO(MX,NX), FMX(NX) COMMON /DEPMAX/ VMAX,VMIN,DV,VAL(256),NCOLS(256),NV,NIS,NIE,JAAUTO ! NSC schermnr ! NF functienr ! JW update assen 1 = ja, niet 1 = nee ! JP teken profielen 1 = ja, 2=circ, 3 = teken isolijnen ! in dat geval DAG (nr van de dag) toevoegen IF (INI .EQ. 0) THEN DO J = 1,NX FMX(J) = 0 DO I = 1,MX XO(I,J) = 0 YO(I,J) = 0 ENDDO ENDDO INI = INI + 1 ENDIF IF (N < 2) RETURN Fx1 = 1.0D20 Fx2 = -1.0D20 DO I = 1,N Fx1 = MIN(X(I),Fx1) Fx2 = MAX(X(I),Fx2) ENDDO Fy1 = 1.0D20 Fy2 = -1.0D20 DO I = 1,N Fy1 = MIN(y(I),Fy1) Fy2 = MAX(y(I),Fy2) ENDDO IF (JAUTO .EQ. 1) THEN X1 = Fx1 X2 = max(Fx2, Fx1 + 1d-4) if (fy1 < 2d0*y1-y2) return if (fy2 > 2d0*y2-y1) return if (fx1 < 2d0*x1-x2) return if (fx2 > 2d0*x2-x1) return ENDIF IF (Fx1 .LT. -1.0D6 .OR. Fx2 .GT. 1.0D6) THEN CALL KTEXT(TITLE,2,2,60) CALL KTEXT('TOO LARGE FOR PLOTTING',3,3,60) RETURN ENDIF IF (Fy1 .LT. -1.0D6 .OR. Fy2 .GT. 1.0D6) THEN CALL KTEXT(TITLE,2,2,60) CALL KTEXT('TOO LARGE FOR PLOTTING',3,3,60) RETURN ENDIF CALL SETWINDOW(NSC,X1,Y1,X2,Y2,DXH,DYH) ! TEKEN IN WINDOW NR ZOVEEL CALL SETCOL(NCOL) IF (JW .EQ. 1) THEN CALL BOX(X1,Y1,X2,Y2) CALL IGRCHARSIZE(2.0,1.0) tex = ' ' write(tex(2:9), '(F8.2)') fy2 - fy1 CALL DRAWTEXT(real((X1+X2)/2.0),real(Y2+DYH),TITLE//tex) if (abs(x1) < 1d3) then WRITE (TEX,'(F8.3)') X1 else WRITE (TEX,'(e8.3)') X1 endif CALL DRAWTEXT(real(X1),real(Y1-DYH),TEX) if (abs(x2) < 1d3) then WRITE (TEX,'(F8.3)') X2 CALL DRAWTEXT(real(X2-6*DXH),real(Y1-DYH),TEX) endif CALL MOVABS((X1+X2)/2, Y1) CALL LNABS((X1+X2)/2, Y1+DYH/2) ENDIF IF (JP == 1 .OR. JP == 2 ) THEN ! JA PROFIELEN if (JP == 1) then CALL DISPF2(X,Y,N,N,NCOL) ! HUIDIGE PROFIEL TEKENEN else rc = (x2-x1) / 100d0 call DISPF2cir(X,Y,N,RC,NCOL) if (kp > 0 .and. kp <=n) then ! print layer value call movabs( x(kp), y(kp) ) call setcol(31) call cir(rc) WRITE (TEX,'(E13.5)') X(kp) xtx = x(kp) if ( xtx > (x1+x2)/2 ) then xtx = x2 - (xtx - x1) endif ytx = Y(kp) CALL GTEXT(TEX, xtx, ytx, NCOL) endif endif IF (JW .EQ. 1) THEN ! ALLEEN BIJ PROFIELEN EN ALS WINDOW GETEKEND WORDT ! WRITE (TEX,'(E16.5)') FMX(NF) ! max profile value xtx = X2-10d0*DXH ytx = Y2-DYH ! CALL GTEXT(TEX, xtx, ytx, 0) WRITE (TEX,'(E16.5)') Fx2 CALL GTEXT(TEX, xtx, ytx, NCOL) FMX(NF) = Fx2 WRITE (TEX,'(E16.5)') Fx1 ! sum(x)/dble(n) ! ave profile value xtx = X1-DXH ytx = Y2-DYH CALL GTEXT(TEX, xtx, ytx, Ncol) ENDIF ELSE if (jp > 0) then ! ISOLIJNEN VMAX = 22 VMIN = 2 NV = 10 DV = VMAX - VMIN DO 40 I = 1,NV VAL(I) = VMIN + (I-1)*DV/(NV-1) 40 CONTINUE !C CALL ISOSCALE() DO I = 2,N XX(1) = DAG-1 XX(2) = DAG-1 XX(3) = DAG XX(4) = DAG YY(1) = YO(I,NF) YY(2) = YO(I-1,NF) YY(3) = Y (I-1) YY(4) = Y (I ) ZZ(1) = XO(I,NF) ZZ(2) = XO(I-1,NF) ZZ(3) = X (I-1) ZZ(4) = X (I ) CALL ISOFIL(XX,YY,ZZ,4,0) ENDDO ENDIF ! TODO, this is not doing anything..... remove? DO I = 1, 0 ! N ! HUIDIGPROFIEL OPSLAAN XO(I,NF) = X(I) YO(I,NF) = Y(I) ENDDO RETURN END SUBROUTINE SETWINDOW(NSC,X1,Y1,X2,Y2,DXH,DYH) implicit none double precision :: dx double precision :: dxh double precision :: dy double precision :: dyh integer :: nsc integer :: numsc double precision :: x1 double precision :: x1sc double precision :: x2 double precision :: x2sc double precision :: y1 double precision :: y1sc double precision :: y2 double precision :: y2sc COMMON /GSCREENS/ X1SC(100),Y1SC(100),X2SC(100),Y2SC(100),NUMSC CALL viewport ( real(X1SC(NSC)),real(Y1SC(NSC)),real(X2SC(NSC)),real(Y2SC(NSC)) ) DX = (X2-X1)*0.1d0 DY = (Y2-Y1)*0.1d0 DXH = DX/2d0 DYH = DY/2d0 ! CALL IGRUNITS( real(X1-DX),real(Y1-DY),real(X2+DX),real(Y2+DY) ) CALL setwor( X1-DX,Y1-DY,X2+DX,Y2+DY ) RETURN END !---------------------------------------------------------------------- ! subroutines from rgfstuff.f90 !---------------------------------------------------------------------- SUBROUTINE CONVERPARAMETERS(JA) USE M_MAPPROPARAMETERS use unstruc_display use m_sferic implicit none integer :: i integer :: ifexit integer :: ifinit integer :: ih integer :: il integer :: imp integer :: inp integer :: ir integer :: iw integer :: ixp integer :: iyp integer :: ja integer :: key integer :: l integer :: nbut integer :: nlevel integer :: numfld integer :: numpar PARAMETER (NUMPAR = 10, NUMFLD = 2*NUMPAR) INTEGER IX(NUMFLD),IY(NUMFLD),IS(NUMFLD),IT(NUMFLD) CHARACTER WRDKEY*40, OPTION(NUMPAR)*40, HELPM(NUMPAR)*60, TEX*132 COMMON /HELPNOW/ WRDKEY,NLEVEL integer, external :: infoinput external :: highlight_form_line ! JA = 0 NLEVEL = 3 OPTION(1) = 'Type of Map Projection (0,1,2,3,4,-1) ' OPTION(2) = 'UTM Zone Nr (1-60) ' OPTION(3) = 'Northern (1) or southern (0) hemisphere ' OPTION(4) = 'Offset X-Direction ' OPTION(5) = 'Offset Y-Direction ' OPTION(6) = 'Rotation Left (deg) ' OPTION(7) = 'X Scalefactor ' OPTION(8) = 'Y Scalefactor ' OPTION(9) = 'X centrepoint (deg) for stereographic ' OPTION(10)= 'Y centrepoint (deg) for stereographic ' ! 123456789012345678901234567890123456789012345678901234567890 ! 1 2 3 4 5 6 HELPM (1) = '0=Trans/Rot,1=UTM,2=Amer,3=RD(Parijs),4=MERC,-1=AFFINE.XYX ' HELPM (2) = 'Usually 0, Except When Type = 1 (UTM) and Cartesian ' HELPM (3) = 'Only used for UTM->latlon conversion ' HELPM (4) = 'X = X + Offset X-Direction, Real Value (m) (Only for Type=0)' HELPM (5) = 'Y = Y + Offset Y-Direction, Real Value (m) (Only for Type=0)' HELPM (6) = 'Rotationcenter = Center of Grid (Only for Type=0)' HELPM (7) = 'Dimensionsless () (Only for Type=0)' HELPM (8) = 'Dimensionsless () (Only for Type=0)' HELPM (9) = 'Degrees (Only for Type=5)' HELPM (10)= 'Degrees (Only for Type=5)' CALL SAVEKEYS() IR = 0 DO 10 I = 1,NUMPAR IL = IR + 1 IR = IL + 1 IX(IL) = 13 ! IX(IR) = 53 IX(IR) = 95 IY(IL) = 2*I IY(IR) = 2*I IS(IL) = 82 IS(IR) = 10 IS(IR) = 10 IT(IL) = 1001 IF (I .LE. 3) THEN IT(IR) = 2 ELSE IT(IR) = 6 ENDIF 10 CONTINUE ! Initialise CALL IWinWordWrap('OFF') CALL ITEXTCOLOURN(HLPFOR, HLPBCK) CALL INHIGHLIGHT('WHITE','RED') IW = NPOS(3) IXP = NPOS(1) + (IWS-IW)/2 IYP = NPOS(2) IH = IHS - 9 ! Header of filewindow CALL IWinAction('FPC') CALL IWinOpen(IXP,IYP,IW,1) CALL ITEXTCOLOURN(LBLFOR,LBLBCK) IF (JSFERIC .EQ. 1) THEN TEX = 'Conversion from Spherical (deg) to Cartesian (m) Coordinates' ELSE TEX = 'Conversion from Cartesian (m) to Spherical (deg) Coordinates' ENDIF L = len_trim(TEX) CALL IWinOutCentre(1,TEX(1:L)) CALL ITEXTCOLOURN(HLPFOR,HLPBCK) ! ! Explain keyfunctions in bottom window CALL IWinAction('FPC') CALL IWinOpen(IXP,IHS-1,IW,2) CALL IWinOutStringXY(1,1,'move = ., Tab, confirm = Enter, no change = Esc, help = F3') CALL IWinOutStringXY(1,2,'right mouse = Enter, click outside window = Esc') ! Filewindow is middelste window CALL IWinAction('FPC') CALL IWinOpen(IXP,IYP+3,IW,IH) CALL InControlKey(29,129) CALL InControlKey(30,128) ! NUMWNH = InfoWindow(1) ! CALL IWinSelect(NUMWNH) ! Define a new form by supplying arrays containing ! field positions, sizes and types CALL IFORMDEFINE('W',NUMFLD,IX,IY,IS,IT) ! Define a help field and define help strings ! for 2 of the 4 input fields CALL IFORMHELP(13,IH,60) IR = 0 DO 20 I = 1,NUMPAR IL = IR + 1 IR = IL + 1 CALL IFORMPUTSTRING (IL,OPTION(I)) CALL IFORMPUTHELP (IR,HELPM(I)) CALL IFORMATTRIBUTEN(IR,0,0,7) 20 CONTINUE CALL IFORMPUTINTEGER( 1*2 ,ITYPE) CALL IFORMPUTINTEGER( 2*2 ,IZONE) CALL IFORMPUTINTEGER( 3*2 ,IHEM) CALL IFormPutDouble ( 4*2,DELTX,'(F10.3)') CALL IFormPutDouble ( 5*2,DELTY,'(F10.3)') CALL IFormPutDouble ( 6*2,FI,'(F10.3)') CALL IFormPutDouble ( 7*2,XF,'(F10.3)') CALL IFormPutDouble ( 8*2,YF,'(F10.3)') CALL IFormPutDouble ( 9*2,xcstereo,'(F10.3)') CALL IFormPutDouble (10*2,ycstereo,'(F10.3)') ! Display the form with numeric fields left justified ! and set the initial field to number 2 CALL IOUTJUSTIFYNUM('L') IFEXIT = 2 call IFormAttribute(IFEXIT-1, 'BU', ' ', ' ') CALL IFORMSHOW() 30 CONTINUE IFINIT = IFEXIT CALL IFormEditUser(IFINIT, IFEXIT, highlight_form_line) ! check for Help, Confirm, Quit KEY = INFOINPUT(55) IF (KEY .EQ. -2) THEN NBUT = INFOINPUT(61) IF (NBUT .GE. 1) THEN IMP = INFOINPUT(62) + 1 INP = INFOINPUT(63) + 1 IF (IMP .GE. IXP .AND. IMP .LT. IXP+IW .AND. & INP .GE. IYP+3 .AND. INP .LT. IYP+IH+3+2 ) THEN IF (NBUT .EQ. 1) THEN KEY = 21 ELSE KEY = 22 ENDIF ELSE KEY = 23 ENDIF ENDIF ELSE IF (KEY .EQ. -1) THEN KEY = INFOINPUT(57) ENDIF IF (KEY .EQ. 26) THEN WRDKEY = OPTION(IFEXIT/2) CALL HELP(WRDKEY,NLEVEL) ELSE IF (KEY .EQ. 22 .OR. KEY .EQ. 23) THEN IF (KEY .EQ. 22) THEN CALL IFORMGETINTEGER( 1*2,ITYPE) CALL IFORMGETINTEGER( 2*2,IZONE) CALL IFORMGETINTEGER( 3*2,IHEM) CALL IFormGetDouble ( 4*2,DELTX) CALL IFormGetDouble ( 5*2,DELTY) CALL IFormGetDouble ( 6*2,FI) CALL IFormGetDouble ( 7*2,XF) CALL IFormGetDouble ( 8*2,YF) CALL IFormGetDouble ( 9*2,Xcstereo) CALL IFormGetDouble (10*2,ycstereo) CSE = COS(DG2RD*FI) SNE = SIN(DG2RD*FI) JA = 1 ENDIF CALL IWinClose(1) CALL IWinClose(1) CALL IWinClose(1) CALL RESTOREKEYS() RETURN ELSE IF (KEY .EQ. 21) THEN IF (IFEXIT .EQ. 1 .OR. IFEXIT .EQ. 3) THEN WRDKEY = HELPM(IFEXIT) CALL HELP(WRDKEY,NLEVEL) ENDIF ENDIF GOTO 30 END SUBROUTINE CONVERPARAMETERS subroutine TEKgrid(key) use m_grid use unstruc_colors implicit none integer :: key integer :: ndraw COMMON /DRAWTHIS/ NDRAW(40) call tekgrd(XC,YC,MMAX,NMAX,1,1,mc,nc,NCOLDG,ndraw(38),key,MC) end subroutine TEKgrid SUBROUTINE TEKgrd(XC, YC, MMAX, NMAX, m1,n1,m2,n2,NCOL,MET,key,MC) implicit none integer :: mmax, nmax, m1, n1, m2, n2, ncol, met, key, mc DOUBLE PRECISION :: XC(MMAX,NMAX), YC(MMAX,NMAX), xlist(nmax), ylist(nmax) integer :: i, j, kmax, ja IF (MET .EQ. 0 .OR. MC == 0) RETURN JA = 0 CALL SETCOL(NCOL) IF (MET .EQ. 2 .OR. MET .EQ. 4) CALL IGRLINETYPE(1) KMAX = 8 DO J = N1,N2 IF (MOD (J,10) .EQ. 0) CALL HALT2(JA) IF (JA .EQ. 1) THEN IF (MET .EQ. 2 .OR. MET .EQ. 4) CALL IGRLINETYPE(0) RETURN ENDIF CALL JGRLINE8(Xc(M1,J),Yc(M1,J),M2-M1+1) ENDDO DO I = M1,M2 IF (MOD (I,10) .EQ. 0) CALL HALT2(JA) IF (JA .EQ. 1) THEN IF (MET .EQ. 2 .OR. MET .EQ. 4) CALL IGRLINETYPE(0) RETURN ENDIF xlist(1:N2-N1+1) = xc(i,N1:N2) ylist(1:N2-N1+1) = yc(i,N1:N2) CALL JGRLINE8(xlist,ylist,N2-N1+1) ENDDO IF (MET .EQ. 2 .OR. MET .EQ. 4) CALL IGRLINETYPE(0) IF (MET .EQ. 5) THEN CALL TEKnumnetcells(0) ENDIF END subroutine tekgrd subroutine TEKnumnetcells(jatel) use m_grid use m_netw use m_polygon use m_missing use unstruc_display implicit none integer :: i,j,n,ncol,jatel,in,k,im,jm,mxnum double precision :: xx(4),yy(4),x,y,z logical :: inview double precision :: vmax, vmin, dv, val integer :: ncols, nv, nis, nie, jaauto COMMON /DEPMAX/ VMAX,VMIN,DV,VAL(256),NCOLS(256),NV,NIS,NIE,JAAUTO call savepol() im = 0 jm = 0 mxnum = 0 if (jatel ==1) then if (nump == 0) call findcells(0) ijyes = 0 else vmax = -9d9 vmin = -vmax do j = 1,nc-1 do i = 1,mc-1 if (ijyes(i,j) > 0) then x = 0.25d0* (xc(i,j) + xc(i+1,j) + xc(i+1,j+1) + xc(i,j+1) ) y = 0.25d0* (yc(i,j) + yc(i+1,j) + yc(i+1,j+1) + yc(i,j+1) ) if (inview(x,y) ) then if (ijyes(i,j) > mxnum) then im = i jm = j mxnum = ijyes(i,j) endif z = ijyes(i,j) vmax = max(z,vmax) vmin = min(z,vmin) endif endif enddo enddo DV = VMAX - VMIN DO I = 1,NV VAL(I) = VMIN + (I-1)*DV/(NV-1) ENDDO endif do j = 1,nc-1 do i = 1,mc-1 n = 0 if (xc(i,j) .ne. dmiss .and. xc(i+1,j) .ne. dmiss .and. & xc(i,j+1) .ne. dmiss .and. xc(i+1,j+1) .ne. dmiss ) then n = n + 1 xpl(n) = xc(i,j ) ypl(n) = yc(i,j) n = n + 1 xpl(n) = xc(i+1,j) ypl(n) = yc(i+1,j) n = n + 1 xpl(n) = xc(i+1,j+1) ypl(n) = yc(i+1,j+1) n = n + 1 xpl(n) = xc(i,j+1) ypl(n) = yc(i,j+1) npl = 4 if (jatel == 1) then in = -1 do k = 1,nump call dbpinpol( xzw(k), yzw(k), in) ijyes(i,j) = ijyes(i,j) + in enddo else z = ijyes(i,j) x = (xpl(1)+xpl(2)+xpl(3)+xpl(4))/4 y = (ypl(1)+ypl(2)+ypl(3)+ypl(4))/4 call kcir(x,y,z) endif endif enddo enddo call restorepol() if (im > 0 ) then i = im j = jm z = ijyes(i,j) x = 0.25d0* (xc(i,j) + xc(i+1,j) + xc(i+1,j+1) + xc(i,j+1) ) y = 0.25d0* (yc(i,j) + yc(i+1,j) + yc(i+1,j+1) + yc(i,j+1) ) CALL SETTEXTSIZEfac(2d0) call htext(z, x, y) CALL SETTEXTSIZE() endif end subroutine TEKnumnetcells SUBROUTINE TEKGRPT( X, Y, mmax, nmax, MC, NC, MP, NP, NCOL ) ! TEKEN GRIDLIJNEN UITKOMEND OP DIT PUNT use m_missing implicit none integer :: mmax, nmax, mc, nc, mp, np, ncol double precision :: X(MMAX,NMAX), Y(MMAX,NMAX) double precision :: xp, yp integer :: mpu, mpd, npu, npd CALL SETCOL(NCOL) IF (MP .EQ. 0) RETURN XP = X(MP,NP) YP = Y(MP,NP) IF (XP .EQ. 0) RETURN MPU = MP + 1 MPD = MP - 1 NPU = NP + 1 NPD = NP - 1 IF (MPU .LE. MC) THEN IF (X(MPU,NP) .NE. XYMIS) THEN CALL MOVABS(X(MPU,NP),Y(MPU,NP)) CALL LNABS(XP,YP) ENDIF ENDIF IF (MPD .GE. 1) THEN IF (X(MPD,NP) .NE. XYMIS) THEN CALL MOVABS(X(MPD,NP),Y(MPD,NP)) CALL LNABS(XP,YP) ENDIF ENDIF IF (NPU .LE. NC) THEN IF (X(MP,NPU) .NE. XYMIS) THEN CALL MOVABS(X(MP,NPU),Y(MP,NPU)) CALL LNABS(XP,YP) ENDIF ENDIF IF (NPD .GE. 1) THEN IF (X(MP,NPD) .NE. XYMIS) THEN CALL MOVABS(X(MP,NPD),Y(MP,NPD)) CALL LNABS(XP,YP) ENDIF ENDIF RETURN END ! NOTE: japes is disabled [AvD] SUBROUTINE SHWXYZ(X,Y,RD1,mmax, nmax, MC,NC,JAPERS,KEY,M,N) use m_missing use unstruc_colors implicit none integer :: mmax, nmax, mc, nc, japers, key, m, n double precision :: X(MMAX,NMAX), Y(MMAX,NMAX), RD1(MMAX,NMAX) CHARACTER WRDKEY*40, OLDKEY*40 double precision :: XLC, YLC, XA, YA integer :: JMOUSE,JASHOW COMMON /LOCATORA/ XLC,YLC,XA,YA,JMOUSE,JASHOW integer :: nlevel COMMON /HELPNOW/ WRDKEY,NLEVEL integer :: jadraw, jonce, jplus, nlevo double precision :: XL, YL, RDOL, FAC IF (MC .EQ. 0) RETURN OLDKEY = WRDKEY NLEVO = NLEVEL WRDKEY = 'TAB = DCURSOR;' CALL IMOUSECURSORHIDE() CALL SETXOR(1) JADRAW = 1 JONCE = 0 JPLUS = 0 IF (JAPERS .EQ. 1) THEN XL = (X1+X2)/2 YL = (Y1+Y2)/2 ELSE XL = XLC YL = YLC ENDIF CALL CLOSPT( X, Y, mmax, nmax, MC, NC, & XL, YL, M, N) RDOL = RD1(M,N) 20 CONTINUE CALL DISPOS2(X(M,N),Y(M,N)) CALL DISDEP(M,N,RD1(M,N)) IF (JADRAW .EQ. 1) THEN CALL TEKGPT( X, Y, mmax, nmax, MMAX, NMAX, & M, N, NCOLTX, RD1) JADRAW = 0 ENDIF CALL INKEYEVENT(KEY) IF (KEY .NE. 27) JONCE = 0 IF (KEY .NE. 45 .AND. KEY .NE. 160 .AND. & KEY .NE. 43 .AND. KEY .NE. 162) JPLUS = 0 CALL DISPOS2(X(M,N),Y(M,N)) CALL DISDEP(M,N,RD1(M,N)) CALL TEKGPT( X, Y, mmax, nmax, MMAX, NMAX, & M, N, NCOLTX, RD1) JADRAW = 1 IF (KEY .EQ. 131) THEN M = MAX(1,M - 1) RDOL = RD1(M,N) ELSE IF (KEY .EQ. 130) THEN M = MIN(MC,M + 1) RDOL = RD1(M,N) ELSE IF (KEY .EQ. 128) THEN N = MIN(NC,N + 1) RDOL = RD1(M,N) ELSE IF (KEY .EQ. 129) THEN N = MAX(1,N - 1) RDOL = RD1(M,N) ELSE IF (KEY .EQ. 171) THEN CALL HELP(WRDKEY,3) ELSE IF (KEY .EQ. 45 .OR. KEY .EQ. 160) THEN IF (X(M,N) .NE. XYMIS) THEN IF (JPLUS .NE. -1) FAC = 1.0 IF (RD1(M,N) .EQ. DMISS) RD1(M,N) = 6.9 RD1(M,N) = RD1(M,N) - .01*FAC FAC = FAC*1.05 JPLUS = -1 ENDIF ELSE IF (KEY .EQ. 43 .OR. KEY .EQ. 162) THEN IF (X(M,N) .NE. XYMIS) THEN IF (JPLUS .NE. 1) FAC = 1.0 IF (RD1(M,N) .EQ. DMISS) RD1(M,N) = 6.9 RD1(M,N) = RD1(M,N) + .01*FAC FAC = FAC*1.05 JPLUS = 1 ENDIF ELSE IF (KEY .EQ. 68 .OR. KEY .EQ. 68+32) THEN RD1(M,N) = DMISS CALL SETCOL(0) CALL MOVABS(X(M,N),Y(M,N)) CALL CIR(RCIR) CALL DISDEP(M,N,RD1(M,N)) ELSE IF (KEY .EQ. 27) THEN JONCE = JONCE + 1 IF (JONCE .GE. 2) THEN CALL ORGLOCATOR(X(M,N),Y(M,N)) CALL IMOUSECURSORSHOW() CALL SETXOR(0) NLEVEL = NLEVO WRDKEY = OLDKEY RETURN ENDIF RD1(M,N) = RDOL CALL DISDEP(M,N,RD1(M,N)) ELSE CALL ORGLOCATOR(X(M,N),Y(M,N)) CALL IMOUSECURSORSHOW() CALL SETXOR(0) NLEVEL = NLEVO WRDKEY = OLDKEY RETURN ENDIF GOTO 20 END subroutine shwxyz SUBROUTINE TEKGPT( X, Y, mmax, nmax, MC, NC, & MP, NP, NCOL, RD1) ! TEKEN GRIDLIJNEN UITKOMEND OP DIT PUNT use m_missing use m_wearelt implicit none integer :: mmax, nmax, mc, nc, mp, np, ncol double precision :: X(MMAX,NMAX), Y(MMAX,NMAX), RD1(MMAX,NMAX) double precision :: XP, YP integer :: MPU, MPD, NPU, NPD, ncolcir XP = X(MP,NP) IF (XP .EQ. XYMIS) RETURN YP = Y(MP,NP) CALL MOVABS(XP,YP) CALL SETCOL(NCOL) MPU = MP + 1 MPD = MP - 1 NPU = NP + 1 NPD = NP - 1 IF (MPU .LE. MC) THEN IF (X(MPU,NP) .NE. XYMIS) THEN CALL MOVABS(X(MPU,NP),Y(MPU,NP)) CALL LNABS(XP,YP) ENDIF ENDIF IF (MPD .GE. 1) THEN IF (X(MPD,NP) .NE. XYMIS) THEN CALL MOVABS(X(MPD,NP),Y(MPD,NP)) CALL LNABS(XP,YP) ENDIF ENDIF IF (NPU .LE. NC) THEN IF (X(MP,NPU) .NE. XYMIS) THEN CALL MOVABS(X(MP,NPU),Y(MP,NPU)) CALL LNABS(XP,YP) ENDIF ENDIF IF (NPD .GE. 1) THEN IF (X(MP,NPD) .NE. XYMIS) THEN CALL MOVABS(X(MP,NPD),Y(MP,NPD)) CALL LNABS(XP,YP) ENDIF ENDIF CALL SETXOR(0) IF (RD1(MP,NP) .NE. DMISS) THEN CALL ISOCOL(RD1(MP,NP),NCOLCIR) CALL CIR(RCIR) CALL SETCOL(0) CALL PTABS(XP,YP) ENDIF CALL SETXOR(1) RETURN END subroutine tekgpt !---------------------------------------------------------------------- ! subroutines from unstruc.f90 !---------------------------------------------------------------------- subroutine tekflowstuff(ja) use unstruc_display use m_netw use m_flowgeom use m_flow use m_wind use m_reduce use m_observations implicit none integer :: ndraw double precision :: vfac, vfacforce integer :: nvec common /drawthis/ ndraw(40) COMMON /VFAC/ VFAC,VFACFORCE,NVEC !locals integer :: k,kk,l,k1,k2,ncol,nn, k3, k4 integer :: nodemode, linkmode ! how to show on flow nodes and links integer :: nodewhat, linkwhat ! what to show on flow nodes and links double precision :: znod, zlin, zcorn ! what to show functions double precision :: xx1, yy1, Zz1 ! help only double precision :: xx2, yy2, Zz2 ! help only double precision :: x3, y3, x4, y4 ! help only double precision :: xd, yd, zd, dxx, dy, rd, d ! only double precision :: zn, x(4), y(4), z(4), zl integer :: jview = 1 ! for now fix regular integer :: model24 = 0 ! colourmodel 0/1 logical :: inview double precision :: ux, uy ! x-y velocity components double precision :: rt, rr0, dddx, dddy, uux, uuy double precision :: getdx, getdy ! ja, externals integer :: n, ja, ja2, nsiz ! ndraw(28)= show what on nodes ndraw(19)=how to show on nodes , NDRAW(8) = SHOW WHAT ON NETNODES ! ndraw(29)= show what on links ndraw(11)=how to show on links , NDRAW(7) = SHOW WHAT ON NETLINKS if ( ndx == 0 ) return ! nplot = min(ndxi, nplot) nplot = max(1,min(Ndx, nplot)) nodemode = ndraw(19) linkmode = ndraw(11) nodewhat = ndraw(28) call tekbathy(ja) if (nodemode > 1 .AND. nodewhat > 1) then IF (NDRAW(8) == 1) call minmxnds() ! ONLY ADAPT VERTICAL LIMITS FOR FLOW NODES IF NO NET NODES ASKED call tekflownodes(ja) if (ja > 0) then return end if if (nodemode .ge. 6) then do k = 1,ndxi if (mod(k,200) == 0) then call halt2(ja) if (ja == 1) return endif if (nodewhat .ge. 2) then ja2 = 1 if (wetplot > 0d0) then if (hs(k) < wetplot) then ja2 = 0 endif if (ja2 == 1) then ! nodewhat==3: always show bottom if (inview( xz(k), yz(k) ) ) then zn = znod(k) call dhtext( zn, xz(k), yz(k), bl(k) ) endif endif endif end if enddo endif if (jaHighlight == 1) then if (ndmax .ne. 0) then call gtext( 'NDMAX', xz(ndmax), yz(ndmax), 31 ) endif if (ndmin .ne. 0) then call gtext( 'ndmin', xz(ndmin), yz(ndmin), 221 ) endif end if if (ndraw(37) >= 1) then call tekprofpoint() endif if (ndraw(37) >= 2) then do k = 1, nbndz ! boundary points tekflowstuff k1 = kbndz(1,k) k2 = kbndz(2,k) zn = znod(k1) call isocol(zn,ncol) call dmovabs( xz(k1), yz(k1), bl(k1) ) call dlnabs( xz(k2), yz(k2), bl(k2) ) call dhtext( zn, xz(k1), yz(k1), bl(k1) ) enddo endif if (ndraw(28) == 28) then ! checkerboard gauss elimin / conj grad ncol = 31 do n=nogauss0+1,nogauss0+nocg0 k = noel0(n) nn = size( nd(k)%x ) call PFILLER(nd(k)%x, nd(k)%y, nn,NCOL,NCol) enddo ncol = 221 do n=1,nogauss0 k = noel0(n) nn = size( nd(k)%x ) call PFILLER(nd(k)%x, nd(k)%y, nn,NCOL,NCol) enddo endif endif if (model24 == 1) then call igrcolourmodel(8) endif call tekflowlinks() if (jaHighlight == 1) then if (Lnmax .ne. 0) then call gtext( 'Lmax', xu(Lnmax), yu(Lnmax), 31 ) endif if (Lnmin .ne. 0) then call gtext( 'Lmin', xu(Lnmin), yu(Lnmin), 221 ) endif endif if (ndraw(31) .ge. 2) then ! cell corners call setcol(221) do k = 1, size(ucnx) if (inview( xk(k), yk(k) ) ) then if (ndraw(31) .le. 4) then ! numbers zn = zcorn(k) call dhtext( zn, xk(k), yk(k), zk(k) ) else if (ndraw(31) == 5) then ! vectors call arrowsxy( xk(k), yk(k), ucnx(k), ucny(k), VFAC) endif endif enddo endif if (ndraw(30) .ge. 2) then ! show links call setcol(221) ! NCOLRG) do L = 1,lnx k1 = ln(1,L) k2 = ln(2,L) if (inview( xz(k1), yz(k1) ) .or. inview( xz(k2), yz(k2) ) ) then XX1 = XZ(K1) YY1 = YZ(K1) ZZ1 = Bob(1,L) XX2 = XZ(K2) YY2 = YZ(K2) ZZ2 = Bob(2,L) if (ndraw(30) .eq. 2 .or. ndraw(30) .eq. 4) then call dmovabs( Xx1, Yy1, Zz1 ) call dlnabs ( Xx2, Yy2, Zz2 ) call dcirr ( Xx1, Yy1, Zz1, 221 ) call dcirr ( Xx2, Yy2, Zz2, 221 ) else if (ndraw(30) .eq. 3) then if (L > lnx1D) then k3 = lncn(1,L) k4 = lncn(2,L) X3 = 0.5d0*(Xk(k3)+Xk(k4)) Y3 = 0.5d0*(Yk(k3)+Yk(k4)) else ! Arrows for 1D links X3 = X1 Y3=Y1 end if call arrowrcir(x3, y3, csu(L), snu(L) ) endif endif enddo if (ndraw(30) .eq. 4) then do k = 1,ndx rt = 0 do n = 1,nd(k)%lnx dddx = getdx( xz(k), nd(k)%x(n), yz(k), nd(k)%y(n) ) dddy = getdy( xz(k), nd(k)%x(n), yz(k), nd(k)%y(n) ) call getdxdy( xz(k), nd(k)%x(n), yz(k), nd(k)%y(n), dddx, dddy ) rr0 = sqrt(dddx*dddx + dddy*dddy) rt = rt + rr0 enddo rt = rt /dble(nd(k)%lnx) call hkcircle(xz(k), yz(k),Rt) enddo endif endif ! do k = 1,ns ! call ptabs(xs(k), ys(k)) ! enddo if (ndraw(13) .ge. 2 .and. ndraw(13) .le. 4) then ! show vectors centre based call setcol(KLVEC) do kk = 1,ndx,nvec if (mod(kk,200) == 0) then call halt2(ja) if (ja == 1) return endif if (inview( xz(kk), yz(kk) ) ) then if (kmx < 1) then k = kk else k = kbot(kk) - 1 + min(kplot,kmxn(kk) ) endif if ( ndraw(13) == 2) then uux = ucx(k) uuy = ucy(k) else if ( ndraw(13) == 3) then uux = ucx(k) uuy = ucy(k) else if ( ndraw(13) == 4) then uux = uqcx(k) uuy = uqcy(k) endif ! call arrowsxy( xz(kk), yz(kk), uux, uuy, VFAC, 0) call arrows( xz(kk), yz(kk), uux, uuy, 0D0, VFAC) endif enddo else if (ndraw(13) .eq. 5) then ! show vectors u based call setcol(3) do L = 1,lnx if (inview( xu(L), yu(L) ) ) then uux = wx(k) uuy = wy(k) call arrowsxy( xu(L), yu(L), uux, uuy, VFAC) endif enddo else if (ndraw(13) .eq. 6) then ! show arc wind call setcol(221) call tekarcuv(vfac,ndraw(13)) else if (ndraw(13) .eq. 7) then ! show arc pressure call setcol(31) call tekarcuv(vfac,ndraw(13)) else if (ndraw(13) .eq. 8) then ! show arc wind call setcol(221) call tekspw(vfac,ndraw(13)) endif if (nodneg .ne. 0) then call setcol(221) call rcirc( xz(nodneg), yz(nodneg) ) endif !call tekcflmax() if ( jased.gt.0 .and. jased.le.3 ) call tekbanfs() call tekship() call tekwindvector() end subroutine tekflowstuff subroutine tekbathy(ja) use unstruc_display use m_flowgeom use m_flow implicit none integer :: nodemode, nodewhat,ndraw integer :: k, ja, nn, ncol logical :: inview double precision :: znod, zn common /drawthis/ ndraw(40) if (ndraw(39) == 0) return nodewhat = ndraw(28) ndraw(28) = 3 do k = 1,ndxi if (mod(k,200) == 0) then call halt(ja) if (ja == 1) then ndraw(28) = nodewhat return endif endif if (inview( xz(k), yz(k) ) ) then zn = znod(k) call isocol2(zn,ncol) nn = size( nd(k)%x ) call PFILLER(nd(k)%x, nd(k)%y, nn,NCOL,NCol) endif enddo ndraw(28) = nodewhat end subroutine tekbathy subroutine tekcflmax() use m_flowgeom use m_flow implicit none if (kkcflmx .ne. 0) then call setcol(31) call rcirc( xz(kkcflmx), yz(kkcflmx) ) endif end subroutine tekcflmax subroutine tekprofpoint() use m_flowgeom use m_flow use unstruc_display implicit none integer :: k, nn if (klprof > 0 .and. nplot.gt.0 ) then call cirr(xz(nplot), yz(nplot), klprof) ! k = nplot ! nn = size( nd(k)%x ) ! call PFILLER(nd(k)%x, nd(k)%y, nn, klprof, klprof) endif end subroutine tekprofpoint subroutine tekflowlinks() use unstruc_display use m_netw use m_flowgeom use m_flow use m_sferic use m_missing implicit none integer :: nodemode, nodewhat,ndraw(40) integer :: k, L, ja, ja2, k1, k2, nn, ncol, linkmode logical :: inview double precision :: zlin, zL double precision :: xcl, ycl, zcl ! help only double precision :: xx1, yy1, Zz1 ! help only double precision :: xx2, yy2, Zz2 ! help only double precision :: x3, y3, x4, y4 ! help only double precision :: x(4), y(4), z(4), hw, cs, sn real :: xr(4), yr(4) common /drawthis/ ndraw linkmode = ndraw(11) if (LINKMODE > 1 .AND. ndraw(29) .ge. 2) then ! show VALUES AT links IF (NDRAW(7) == 1) call minmxlns() ! ONLY ADAPT VERTICAL LIMITS FOR FLOW links IF NO NET links ASKED IF (linkmode == 3 .OR. linkmode == 6) THEN call copyzlintornod() do k = 1,ndx2d if (mod(k,200) == 0) then call halt2(ja) if (ja == 1) return endif if (inview( xz(k), yz(k) ) ) then call ISOSMOOTHflownode2(k) endif enddo else do L = 1,lnx if (mod(L,200) == 0) then call halt2(ja) if (ja == 1) return endif if ( inview( xu(L), yu(L) ) ) then ZZ1 = 0d0 !Bob(1,L) ZZ2 = 0d0 !Bob(2,L) xcl = xu(L) ycl = yu(L) zcl=0.5*(ZZ1+ZZ2) zl = zlin(L) if ( zL.eq.DMISS ) cycle CALL ISOCOL2(zl,NCOL) k1 = ln(1,L) xX1 = Xz(K1) yY1 = Yz(K1) k2 = ln(2,L) xX2 = Xz(K2) yY2 = Yz(K2) IF (linkmode .EQ. 3 .OR. linkmode .EQ. 6) THEN CALL DMOVABS(XX1,YY1,ZZ1) CALL DLNABS(XX2,YY2,ZZ2) ELSE IF (linkmode .EQ. 4 .OR. linkmode .EQ. 7) THEN if (L > Lnx1D) then ! 2D k1 = lncn(1,L) X3 = Xk(K1) Y3 = Yk(K1) k2 = lncn(2,L) X4 = Xk(K2) Y4 = Yk(K2) CALL DRIETWEE(Xx1, Yy1, ZZ1, X(1), Y(1), Z(1) ) CALL DRIETWEE(X3, Y3, ZZ1, X(2), Y(2), Z(2) ) CALL DRIETWEE(Xx2, Yy2, ZZ2, X(3), Y(3), Z(3) ) CALL DRIETWEE(X4, Y4, ZZ2, X(4), Y(4), Z(4) ) xr = x yr = y CALL PFILLERCORE(Xr,Yr,4) else ! hw = 0.25d0*( a1(k1) + a1(k2) )/dx(L) if (hu(L) > 0d0) then hw = 0.5d0 * Au(L) / hu(L) ! flat bed, half width else hw = 1d-3 endif if (jsferic == 1) then hw = hw*rd2dg/ra endif sn = snu(L) cs = csu(L) x(1) = xx1 + sn*hw y(1) = yy1 - cs*hw x(2) = xx2 + sn*hw y(2) = yy2 - cs*hw x(3) = xx2 - sn*hw y(3) = yy2 + cs*hw x(4) = xx1 - sn*hw y(4) = yy1 + cs*hw xr = x yr = y CALL PFILLERCORE(Xr,Yr,4) endif ELSE IF (linkmode .EQ. 5 .OR. linkmode .EQ. 8) THEN CALL DRCIRC(XCL,YCL,ZCL) ENDIF if ( linkmode == 2 .or. linkmode == 6 .or. linkmode == 7 .or. linkmode == 8) then IF (NDRAW(29) .EQ. 12 .or. NDRAW(29) .EQ. 29 .or. NDRAW(29) .EQ. 33 .or. NDRAW(29) .EQ. 35 .or. NDRAW(29) .EQ. 36) THEN CALL DHITEXT( int(zl), xCL, yCL, zCL ) else call dhtext( zl, xCL, yCL, zCL ) end if endif endif enddo endif ! linkmode endif ! ndraw(29) end subroutine tekflowlinks subroutine tekflownodes(ja) use unstruc_display use m_flowgeom use m_flow use m_missing use m_transport implicit none integer :: nodemode, nodewhat,ndraw(40) integer :: k, ja, ja2, nn, ncol logical :: inview double precision :: znod, zn, x(8), y(8) common /drawthis/ ndraw nodemode = ndraw(19) nodewhat = ndraw(28) if (nodemode == 3) then ! interpolate rnod on netnodes based upon znod on flownodes call copyznodtornod() endif do k = 1,ndxi if (mod(k,200) == 0) then call halt(ja) if (ja == 1) return endif if (nodewhat .ge. 2) then ja2 = 1 if (wetplot > 0d0) then if (hs(k) < wetplot) then ja2 = 0 endif endif if (ja2 == 1 .or. nodewhat == 3) then ! nodewhat==3: always show bottom if (inview( xz(k), yz(k) ) ) then zn = znod(k) if ( zn.eq.DMISS ) cycle if (nodemode .eq. 2) then call dhtext( zn, xz(k), yz(k), bl(k) ) else if (nodemode == 3 .or. nodemode == 3 + 3) then ! isolines within cell if (k <= ndx2d) then call ISOSMOOTHflownode(k) else call isocol(zn,ncol) nn = size( nd(k)%x ) call PFILLER(nd(k)%x, nd(k)%y, nn,NCOL,NCol) endif else if (nodemode .ge. 4 .or. nodemode == 4 + 3) then ! isofil= cellfill call isocol(zn,ncol) if ( nodemode == 5 .or. nodemode == 5 + 3 ) then call drcirc(xz(k), yz(k), zn) else nn = size( nd(k)%x ) call PFILLER(nd(k)%x, nd(k)%y, nn,NCOL,NCol) endif endif endif endif endif enddo end subroutine tekflownodes subroutine tekarcuv(vfac,met) use M_arcuv implicit none double precision :: vfac integer :: met integer :: mx, nx, i, j mx = size(arcuv,2) nx = size(arcuv,3) do i = 1,mx do j = 1,nx call setcol(221) if (met == 6) then call arrowsxy( arcuv(1,i,j) , arcuv(2,i,j), arcuv(3,i,j) , arcuv(4,i,j), 50*VFAC) else call htext(arcuv(3,i,j), arcuv(1,i,j) , arcuv(2,i,j) ) endif enddo enddo end subroutine tekarcuv subroutine tekspw(vfac,met) use m_flowgeom use m_spiderweb use m_wind implicit none double precision :: vfac, shft integer :: met integer :: mx, nx, i, j, L shft = 0d0 mx = size(spw,2) nx = size(spw,3) if (sum(xu(:)) .lt. 0) then shft = 1d0 end if if (mx.ne.0 .and. nx.ne.0) then do i = 1,mx-1 do j = 1,nx call setcol(221) call arrowsxy( spw(1,i,j) - shft*360d0, spw(2,i,j), spw(3,i,j) , spw(4,i,j), 0.05*VFAC) enddo enddo endif if (allocated(wx)) then do L = 1,lnxi call setcol(224) call arrowsxy( xu(L) , yu(L) , wx(L) , wy(L), 0.05*VFAC) enddo endif end subroutine tekspw subroutine tekrai(nsiz,ja) use unstruc_colors use m_netw use m_flow use m_flowgeom use m_flowtimes use unstruc_model use unstruc_display use m_raaitek use m_missing use m_sediment use m_strucs implicit none integer :: nsiz, ja double precision :: xx1, xx2, zz integer :: k1, k2, l1, l2, n1, n2 double precision :: uu, ww, z1, z2 double precision :: zfac, zgaten integer :: l, k, kk, j, kplotorg, n, ncol double precision :: VMAX,VMIN,DV,VAL(256) integer :: NCOLS(256),NIS,NIE,nv,JAAUTO double precision :: vfac, vfacforce, doorh integer :: nvec, ng common /depmax/ vmax,vmin,dv,val,ncols,nv,nis,nie,jaauto COMMON /VFAC/ VFAC,VFACFORCE,NVEC common /drawthis/ ndraw(40) integer :: ndraw double precision :: xmn, xmx, ymn, ymx, zmn, zmx, zmx2, bot, top, xx, yy, bup double precision :: xp(4), yp(4), zp(4), xxmn, xxmx, zn, dlay, dl, xp1, yp1 integer :: mx, kb, kt, Lb, Lt, LL double precision, external :: znod, zlin logical, external :: inview double precision, allocatable :: plotlin2(:) integer , allocatable :: ip(:), ip2(:) if (ndx < 1) return if (nsiz > 3) then call poiseuille(0) return endif xmn = 1e10 xmx = -xmn ymn = 1e10 ymx = -ymn zmn = 1e10 zmx = -zmn do k = 1,ndx xx = xz(k) yy = yz(k) if ( inview(xx,yy) ) then if (xz(k) < xmn ) xmn = xz(k) if (xz(k) > xmx ) xmx = xz(k) if (yz(k) < ymn ) ymn = yz(k) if (yz(k) > ymx ) ymx = yz(k) bot = bl(k) top = s1(k) zmn = min( zmn,min( bot, top ) ) zmx = max( zmx,max( bot, top ) ) endif enddo if (jased > 0 .and. zminrai == dmiss .and. .not.stm_included) then dlay = 0d0 if (jaceneqtr == 1) then mx = ndxi else mx = size(grainlay,2) endif do k = 1,mx if (jaceneqtr == 1) then xx = xz(k) yy = yz(k) else xx = xk(k) yy = yk(k) endif if ( inview(xx,yy) ) then dL = 0 do j = 1,mxgr dL = dL + grainlay(j,k) enddo dlay = max(dlay, dL) endif enddo zmn = zmn - dlay endif if (zmn == zmx) then zmn = zmn -1d-3 zmx = zmx + 1d-3 else zmn = zmn - 1d-2*(zmx-zmn) endif if (xmn == xmx) then xmn = xmn -1d-3 xmx = xmx + 1d-3 endif if (nsiz == 1) then zmx = zmn + 1.2d0*(zmx-zmn) else zmx = zmn + 1.5d0*(zmx-zmn) endif if (zminrai .ne. -999) then zmn = zminrai zmx=max(zmn+1d-2, zmaxrai) endif if (md_ident == 'transport1d') then zmn = 0 zmx = 30 endif IF (YFAC > 0) THEN if (ymx .ne. ymn) then yfac = (zmx - zmn)/(ymx-ymn) else yfac = 0D-4 endif ENDIF zmx2 = zmx + yfac*(ymx-ymn) if (zmx2 == zmn) zmx2 = zmn + 1 if (nsiz == 1) then call setwor_rai(0.0,0.77,1.0,0.92, x1, zmn, x2, zmx2 ) else if (nsiz == 2) then call setwor_rai(0.0,0.56,1.0,0.92, x1, zmn, x2, zmx2 ) else if (nsiz == 3) then call setwor_rai(0.0,0.15,1.0,0.92, x1, zmn, x2, zmx2 ) endif if (kmx > 0) then kplot = max(kplot,1) kplot = min(kplot,kmxn(nplot)) kplotorg = kplot if (ndraw(28) > 3) then ! show node values if (ndraw(19) == 3) then if (.not. allocated(plotlin2) ) then allocate( plotlin2(lnkx), ip(lnkx), ip2(lnkx) ) endif plotlin = 0d0 plotlin2 = 0d0 ip = 0 ip2 = 0 do LL = 1,lnx k1 = ln(1,LL) k2 = ln(2,LL) call getLbotLtop(LL,Lb,Lt) do L = Lb, Lt kplot = L - Lb + 1 plotlin (L) = plotlin (L) + znod(k1) ip (L) = ip (L) + 1 kplot = MAX( kplot - 1, 1) plotlin (L-1) = plotlin (L-1) + znod(k1) ip (L-1) = ip (L-1) + 1 plotlin2(L-1) = plotlin2(L-1) + znod(k2) ip2 (L-1) = ip2 (L-1) + 1 kplot = L - Lb + 1 plotlin2(L) = plotlin2(L) + znod(k2) ip2 (L) = ip2 (L) + 1 enddo enddo do LL = 1,lnx call getLbotLtop(LL,Lb,Lt) do L = Lb-1, Lt if (ip(L) > 0) then plotlin (L) = plotlin (L) / ip(L) endif if (ip2(L) > 0) then plotlin2(L) = plotlin2(L) / ip2(L) endif enddo enddo do LL = 1,lnx k1 = ln(1,LL) k2 = ln(2,LL) xp(1) = xz(k1) xp(2) = xp(1) xp(3) = xz(k2) xp(4) = xp(3) call getLbotLtop(LL,Lb,Lt) do L = Lb, Lt k1 = ln(1,L) k2 = ln(2,L) yp(1) = zws(k1) yp(2) = zws(k1-1) yp(3) = zws(k2-1) yp(4) = zws(k2) zp(1) = plotlin(L) zp(2) = plotlin(L-1) zp(3) = plotlin2(L-1) zp(4) = plotlin2(L) call isofil(xp, yp, zp, 4, 0) enddo enddo else do n = 1,ndxi xxmn = minval( nd(n)%x ) xxmx = maxval( nd(n)%x ) xp(1) = xxmn xp(2) = xxmx xp(3) = xxmx xp(4) = xxmn kb = kbot(n) kt = ktop(n) do k = kb, kt yp(1) = zws(k-1) yp(2) = yp(1) yp(3) = zws(k) yp(4) = yp(3) kplot = k - kb + 1 zn = znod(n) call isocol(zn, ncol) if (ndraw(19) == 2) then call dhtext( zn, xz(N), 0.5D0*(YP(1)+YP(3)) , 0.5D0*(YP(1)+YP(3)) ) else call PFILLER(xp,yp,4,ncol, ncol ) endif enddo enddo endif endif if ( ndraw(29) > 1) then ! show link values do LL = 1,Lnx n1 = ln(1,LL) n2 = ln(2,LL) xp(1) = xz(n1) xp(4) = xp(1) xp(2) = xz(n2) xp(3) = xp(2) Lb = Lbot(LL) do L = Lb , Ltop(LL) k1 = ln(1,L) k2 = ln(2,L) yp(1) = zws(k1-1) yp(2) = zws(k2-1) yp(3) = zws(k2) yp(4) = zws(k1) kplot = L - Lb + 1 zn = zlin(LL) call isocol2(zn, ncol) if (ndraw(11) == 2) then xp1 = 0.25d0*(xp(1) + xp(2) + xp(3) + xp(4) ) yp1 = 0.25d0*(yp(1) + yp(2) + yp(3) + yp(4) ) call dhtext( zn, xp1, yp1, yp1 ) else call PFILLER(xp,yp,4,ncol, ncol ) endif enddo enddo endif ncol = 221 ! markerpoint n = nplot k = kbot(n) + kplotorg - 1 xxmn = minval( nd(n)%x ) xxmx = maxval( nd(n)%x ) xp(1) = 0.5d0*(xxmx + xxmn) yp(1) = 0.5d0*(zws(k) + zws(k-1)) call cirr(xp(1), yp(1), ncol) ! xp(1) = xxmn ; xp(2) = xxmx ; xp(3) = xxmx ; xp(4) = xxmn ! yp(1) = zws(k-1) ; yp(2) = yp(1) ! yp(3) = zws(k) ; yp(4) = yp(3) ! call PFILLER(xp,yp,4,ncol, ncol ) if ( NDRAW(2) > 0 ) then ! draw interface lines in white do LL = 1,lnxi n1 = ln(1,LL) n2 = ln(2,LL) xx = xz(n1) xx2 = xz(n2) if (hu(LL) > 0) then Lb = Lbot(LL) Lt = Ltop(LL) do L = Lb, Lt if (hu(L) > 0) then k1 = ln(1,L) k2 = ln(2,L) call movabs(xx ,zws(k1)) call lnabs(xx2,zws(k2)) endif enddo endif enddo endif if (jaanalytic == 0 ) then call setcol(ncolblack) CALL LINEWIDTH(2) do LL = 1,lnxi if (hu(LL) > 0) then n1 = ln(1,LL) n2 = ln(2,LL) xx = xz(n1) xx2 = xz(n2) call movabs(xx ,s1(n1)) call lnabs(xx2,s1(n2)) endif enddo endif call setcol(31) do LL = 1,lnxi n1 = ln(1,LL) n2 = ln(2,LL) xx = xz(n1) xx2 = xz(n2) call movabs(xx ,bl(n1)) call lnabs(xx2,bl(n2)) enddo CALL LINEWIDTH(1) if ( NDRAW(13) .ge. 2) then call setcol(klvec) zfac = (zmx2-zmn)/(x2-x1) do n = 1,ndxi xp(1) = xz(n) do k = kbot(n),ktop(n) uu = ucx(k) ww = 0.5d0*( ww1(k) + ww1(k-1)) yp(1) = 0.5d0*(zws(k)+zws(k-1)) call arrowsxyzfac( xp(1), yp(1), uu, ww, VFAC, 0, zfac) enddo enddo endif kplot = kplotorg endif call tekrailinesbathy(31,ymn,zmn,0,1) ! bl if (jased > 0 .and. jased < 4) then do j = 1,mxgr call tekrailinesbathy(15,ymn,zmn,0,1+j) ! grainlay 1,2 etc enddo endif if (jagrw == 2) then call tekrailines(ncolln,ymn,1,4) ! pgrw call tekrailines(ncolln,ymn,1,5) ! pgrw endif if (md_ident == 'transport1d' .or. jasal == 1 .and. ( md_ident == 'wetbed' .or. md_ident == 'wetbed' ) ) then call tekrailines(221,ymn,1,3) ! sa1 endif if (kmx == 0) then call tekrailines(221,ymn,1,1) ! s1 endif call setcol(ncolblack) ! NCOLANA) ! call LINEWIDTH(2) if (md_IDENT == 'transport1d') then call tektransport1D(time1-tstart_user) call setcol(3) call movabs(xmn, 0d0) call lnabs( xmx, 0d0) !call htext( 1d0, xmx, 1d0) else if (md_IDENT == 'carrier') then call carrier(ndx,time1-tstart_user) else if (md_IDENT(1:6) == 'drybed') then call drybed(time1-tstart_user) else if (md_IDENT(1:6) == 'wetbed') then call wetbed(time1-tstart_user) else if (index(md_ident,'thacker1d') > 0) then call thacker1d(0,xz,yz,s1,bl,ndx,time1-tstart_user) else if (md_IDENT == 'equator1d') then call equatorial(time1-tstart_user) else if (md_IDENT(1:8) == 'belanger') then call belanger() endif ! call LINEWIDTH(1) do ng = 1,ngatesg ! loop over gate signals, tekrai zgaten = zgate(ng) do n = L1gatesg(ng), L2gatesg(ng) L = kgate(3,n) ; k1 = ln(1,L) ; k2 = ln(2,L) bup = min( bob(1,L), bob(2,L) ) call fbox(xz(k1),zgaten,xz(k2),zgaten+10d0) call fbox(xz(k1),bup ,xz(k2),bup-10d0) enddo enddo do ng = 1,ncgensg ! loop over gate signals, tekrai zgaten = zcgen(3*ng-1) do n = L1cgensg(ng), L2cgensg(ng) k1 = kcgen(1,n) k2 = kcgen(2,n) L = kcgen(3,n) bup = min( bob(1,L), bob(2,L) ) doorh = 10d0 if (generalstruc(ng)%gatedoorheight < 10d10 .and. generalstruc(ng)%gatedoorheight < 10d10) then if (generalstruc(ng)%gatedoorheight > 0d0) doorh = generalstruc(ng)%gatedoorheight call fbox(xz(k1),zgaten,xz(k2),zgaten+doorh) end if call fbox(xz(k1),bup ,xz(k2),zmn) ! bup-10d0 enddo enddo do ng = 1,ncdamsg ! loop over gate signals, tekrai do n = L1cdamsg(ng), L2cdamsg(ng) L = kcdam(3,n) ; k1 = ln(1,L) ; k2 = ln(2,L) bup = bob(2,L) ! min( bob(1,L), bob(2,L) ) call fbox(xz(k1),bup ,xz(k2),bup-10d0) enddo enddo call viewport(0.0,0.0,1.0,1.0) if (nsiz > 1 .and. jtextflow > 0) then ! assen in 'gewone' aspect=1 wereld coordinaten, anders wordt de text plat afgedrukt in interacter ! CALL IGrUnits (0.0,0.0,1.0,1.0) CALL setwor(0d0,0d0,1d0,1d0) call setcol(3) ! zwart zz = 0.05*(zmx-zmn)/nsiz call htext_rai( zmn , x1+12d0*rcir, zmn-2d0*zz,rcir,zz,1) call htext_rai( zmx , x1+12d0*rcir, zmx ,rcir,zz,1) call htext_rai( x1+10d0*rcir, x1+12d0*rcir, zmn-2d0*zz,rcir,zz,2) call htext_rai( x2-10d0*rcir, x2-12d0*rcir, zmn-2d0*zz,rcir,zz,2) endif call setwor(x1,y1,x2,y2) return end subroutine tekrai subroutine setwor_rai(xs1,ys1,xs2,ys2,xw1,yw1,xw2,yw2) use m_raaitek implicit none real :: xs1,ys1,xs2,ys2 double precision :: xw1,yw1,xw2,yw2 call viewport(xs1,ys1,xs2,ys2) call setwor (xw1,yw1,xw2,yw2) xs1m = xs1 ys1m = ys1 xs2m = xs2 ys2m = ys2 xw1m = xw1 yw1m = yw1 xw2m = xw2 yw2m = yw2 end subroutine setwor_rai subroutine htext_rai(val,x,y,xx,zz,ihv) use m_raaitek implicit none double precision :: val,x,y,xx,zz double precision :: fx, fy, xa, ya integer :: ihv fx = xs2m-xs1m fy = ys2m-ys1m if (ihv == 1) then xa = fx*(x-xx-xw1m)/(xw2m-xw1m) + xs1m ya = fy*(y -yw1m)/(yw2m-yw1m) + ys1m call movabs(xa,ya) xa = fx*(x+xx-xw1m)/(xw2m-xw1m) + xs1m call lnabs (xa,ya) xa = fx*(x-11d0*xx-xw1m)/(xw2m-xw1m) + xs1m else if (ihv == 2) then xa = fx*(x -xw1m)/(xw2m-xw1m) + xs1m ya = fy*(y-zz-yw1m)/(yw2m-yw1m) + ys1m call movabs(xa,ya) ya = fy*(y+zz-yw1m)/(yw2m-yw1m) + ys1m call lnabs (xa,ya) xa = fx*(x-5d0*xx-xw1m)/(xw2m-xw1m) + xs1m ya = fy*(y-3d0*zz-yw1m)/(yw2m-yw1m) + ys1m endif call htext(val,xa,ya) end subroutine htext_rai subroutine tekrailines(ncol,ymn,jaall,ITYP) use m_flowgeom USE M_FLOW use m_flowtimes use m_sferic use unstruc_display implicit none integer :: nx, ncol, jaall, ITYP double precision :: ymn integer :: r, L, k1,k2 double precision :: zz1, zz2, xz1, xz2 integer :: ja call setcol(ncol) do L = 1,lnx if (mod(L,200) == 0) then call halt2(ja) if (ja == 1) exit endif k1 = ln (1,L) k2 = ln (2,L) if (jaall == 1 .and. wetplot > 0d0) then if (hs(k1) < wetplot .or. hs(k2) < wetplot) then cycle endif endif if (ityp == 1) then zz1 = s1(k1) zz2 = s1(k2) else if (ityp == 2) then zz1 = bl(k1) zz2 = bl(k2) else if (ityp == 3) then zz1 = sa1(k1) zz2 = sa1(k2) else if (ityp == 4) then zz1 = pgrw(k1) zz2 = pgrw(k2) else if (ityp == 5) then zz1 = sgrw1(k1) zz2 = sgrw1(k2) endif if (yfac > 0) then zz1 = zz1 + (yz(k1) - ymn)*yfac zz2 = zz2 + (yz(k2) - ymn)*yfac endif if (jsferic == 1) then ! jglobe if (abs(xz(k1) - xz(k2)) > 10d0) cycle endif xz1 = xz(k1) xz2 = xz(k2) if (abs(zz1) < 1d-6) zz1 = 0d0 ! heh heh, eindelijk. -> #@! if (abs(zz2) < 1d-6) zz2 = 0d0 call movabs(xz1, zz1 ) call lnabs(xz2, zz2 ) enddo end subroutine tekrailines subroutine tekrailinesBATHY(ncol,ymn,zmn,jaall,ITYP) use m_flowgeom USE M_FLOW use m_flowtimes use m_sferic use unstruc_display use m_netw, only : xk,yk,zk use m_sediment implicit none integer :: nx, ncol, jaall, ITYP double precision :: ymn, zmn integer :: r, L, k1,k2, kk,k,n double precision :: zz1, zz2, xx1, xx2, yy1, yy2 integer :: ja, jg call setcol(ncol) do L = 1,lnx if (mod(L,200) == 0) then call halt2(ja) if (ja == 1) exit endif if (ityp == 1) then ! bottom layer if (ibedlevtyp == 1 .or. ibedlevtyp == 6) then ! tegelen k1 = ln (1,L) k2 = ln (2,L) xx1 = xz(k1) xx2 = xz(k2) zz1 = bl(k1) zz2 = bl(k2) if (yfac > 0) then yy1 = yz(k1) yy2 = yz(k2) endif else k1 = lncn(1,L) k2 = lncn(2,L) xx1 = xk(k1) xx2 = xk(k2) zz1 = zk(k1) zz2 = zk(k2) if (yfac > 0) then yy1 = yk(k1) yy2 = yk(k2) endif endif else ! non erodable layer jg = ityp - 1 if (jaceneqtr == 1 ) then ! combined data not really drawn precise if no tegel k1 = ln (1,L) k2 = ln (2,L) xx1 = xz(k1) xx2 = xz(k2) zz1 = bl(k1) - sum(grainlay(1:jg,k1) ) zz2 = bl(k2) - sum(grainlay(1:jg,k2) ) if (yfac > 0) then yy1 = yz(k1) yy2 = yz(k2) endif else k1 = lncn(1,L) k2 = lncn(2,L) xx1 = xk(k1) xx2 = xk(k2) zz1 = zk(k1) - sum(grainlay(1:jg,k1) ) zz2 = zk(k2) - sum(grainlay(1:jg,k2) ) if (yfac > 0) then yy1 = yk(k1) yy2 = yk(k2) endif endif endif if (yfac > 0) then zz1 = zz1 + (yy1 - ymn)*yfac zz2 = zz2 + (yy1 - ymn)*yfac endif if (jsferic == 1) then ! jglobe if (abs( xz(ln(1,L)) - xz(ln(2,L) ) ) > 10d0) cycle endif if (abs(zz1) < 1d-6) zz1 = 0d0 ! heh heh, eindelijk if (abs(zz2) < 1d-6) zz2 = 0d0 call movabs(xx1, zz1 ) call lnabs(xx2, zz2 ) enddo if (jaceneqtr == 2 .and. ityp ==4) then do kk = 1,mxban n = nban(1,kk) k = nban(2,kk) xx1 = xz(k) yy1 = yz(k) zz1 = zmn + grainlay(1,kk) ! bl(k) - grainlay(1,kk) xx2 = xk(n) yy2 = yk(n) zz2 = zmn + grainlay(1,kk) ! zk(n) - grainlay(1,kk) call movabs(xx1, zz1 ) call lnabs(xx2, zz2 ) enddo endif end subroutine tekrailinesBATHY subroutine tektransport1D(tim) use m_sferic use m_statistics use m_flowgeom use m_flow implicit none double precision :: tim double precision :: cwave, period, omeg, wlen, rk, phi, xx, yy, dif integer :: k cwave = 60d0*sqrt(10d0*1d-4) ! chezy period = 90d0*60d0 omeg = twopi/period ! s wlen = cwave*period rk = twopi/wlen do k = 1,600 xx = -50d0 + (k-1)*100d0 phi = rk*xx - omeg*tim yy = 15d0 + 10d0*cos(phi) if (k == 1) then call movabs(xx,yy) else call lnabs(xx,yy) endif enddo if (ndxi < 1) return avedif = 0d0 do k = 1,ndxi xx = xz(k) phi = rk*xx - omeg*tim yy = 15d0 + 10d0*cos(phi) dif = abs(sa1(k) - yy) avedif = avedif + dif enddo avedif = avedif/ndxi end subroutine tektransport1D subroutine hkcircle(x,y,r) ! plotdevice routine interacter is niet goed, zie file fout.bmp implicit none double precision :: x, y, r double precision :: twopi , phi integer :: k twopi = 2*acos(-1d0) call movabs(x+r,y) do k = 1,360 phi = twopi*dble(k)/360. call lnabs( x+r*cos(phi), y+r*sin(phi) ) enddo end subroutine hkcircle SUBROUTINE DISND(NN) ! print node values use m_devices use m_flowgeom implicit none integer :: nn CHARACTER TEX*23 DOUBLE PRECISION :: ZNOD IF (NN .LE. 0) THEN TEX = 'NO FLOW NODE FOUND ' CALL KTEXT(TEX,IWS-22,4,15) ELSE TEX = 'FLOW NODE NR: ' WRITE(TEX (14:),'(I10)') NN CALL KTEXT(TEX,IWS-22,4,15) TEX = 'VAL= ' WRITE(TEX(6:), '(E18.11)') ZNOD(NN) CALL KTEXT(TEX,IWS-22,5,15) TEX = 'XZ = ' WRITE(TEX(6:), '(E18.11)') XZ(NN) CALL KTEXT(TEX,IWS-22,6,15) TEX = 'yZ = ' WRITE(TEX(6:), '(E18.11)') YZ(NN) CALL KTEXT(TEX,IWS-22,7,15) ENDIF RETURN END SUBROUTINE DISND SUBROUTINE DISLN(LL) ! print link values use m_flowgeom use m_devices implicit none integer :: LL CHARACTER TEX*23 DOUBLE PRECISION :: ZLIN IF (LL .LE. 0) THEN TEX = 'NO FLOW LINK FOUND ' CALL KTEXT(TEX,IWS-22,4,15) ELSE TEX = 'FLOW LINK NR: ' WRITE(TEX (14:),'(I10)') LL CALL KTEXT(TEX,IWS-22,4,15) TEX = 'VAL= ' WRITE(TEX(6:), '(E18.11)') ZLIN(LL) CALL KTEXT(TEX,IWS-22,5,15) TEX = 'Nd1: ' WRITE(TEX (6:),'(I10)') LN(1,LL) CALL KTEXT(TEX,IWS-22,6,15) call gtext(tex, xz(ln(1,LL)), yz(ln(1,LL)), 221) TEX = 'Nd2: ' WRITE(TEX (6:),'(I10)') LN(2,LL) CALL KTEXT(TEX,IWS-22,7,15) call gtext(tex, xz(ln(2,LL)), yz(ln(2,LL)), 221) ENDIF RETURN END SUBROUTINE DISLN subroutine GETSHIPCONTROL() use m_ship implicit none integer :: ndraw COMMON /DRAWTHIS/ NDRAW(40) integer :: key, n CALL InKeyEventIMM(KEY) n = 0 ! pijltjesbeweging IF (KEY .EQ. 128) THEN fstuw(1) = min( 1d0, fstuw(1) + 0.02) n = 1 ELSE IF (KEY .EQ. 129) THEN fstuw(1) = max(-1d0, fstuw(1) - 0.02) n = 1 ELSE IF (KEY .EQ. 130) THEN fROER(1) = MIN( 1D0, fROER(1) + 0.02) n = 1 ELSE IF (KEY .EQ. 131) THEN fROER(1) = MAX(-1D0, fROER(1) - 0.02) n = 1 ELSE IF (KEY .EQ. 53) THEN FSTUW(1) = 0D0 FROER(1) = 0D0 n = 1 ENDIF IF (KEY .EQ. 87 .OR. KEY .EQ. 87+32) THEN ! W fstuw(2) = min( 1d0, fstuw(2) + 0.02) n = 2 ELSE IF (KEY .EQ. 83 .OR. KEY .EQ. 83+32) THEN ! S fstuw(2) = max(-1d0, fstuw(2) - 0.02) n = 2 ELSE IF (KEY .EQ. 68 .OR. KEY .EQ. 68+32) THEN fROER(2) = MIN( 1D0, fROER(2) + 0.02) n = 2 ELSE IF (KEY .EQ. 65 .OR. KEY .EQ. 65+32) THEN fROER(2) = MAX(-1D0, fROER(2) - 0.02) n = 2 else if (KEY .EQ. 81 .OR. KEY .EQ. 81+32) then FSTUW(2) = 0D0 FROER(2) = 0D0 n = 2 ENDIF if (n > 0) THEN ndraw(1) = 0 ! no CLS call tekship() endif end subroutine getshipcontrol subroutine tekbanfs() use m_netw use m_flowgeom use m_sediment implicit none double precision :: x, y, z, v, hsk integer :: kk, n, k, kj, ncol, ndraw COMMON /DRAWTHIS/ NDRAW(40) double precision :: flx (mxgr) !< sed erosion flux (kg/s) , dimension = mxgr double precision :: seq (mxgr) !< sed equilibrium transport rate (kg/m/s) , dimension = mxgr double precision :: wse (mxgr) !< effective fall velocity (m/s) , dimension = mxgr, ws*crefa=wse*seq if (ndraw(34) <= 1 .or. jaceneqtr == 1 .or. jased == 0 ) return call setcol(3) do kk = 1,mxban call getequilibriumtransportrates(kk, seq, wse, mxgr, hsk) ! get per netnode and store in small array seq n = nban(1,kk) ! net node k = nban(2,kk) ! flow node x = 0.5d0*(xk(n) + xz(k)) y = 0.5d0*(yk(n) + yz(k)) v = seq(jgrtek) call isocol(v,ncol) if (ndraw(34) == 2) then CALL dHTEXT(seq(jgrtek),X,Y,Z) else if (ndraw(34) == 3) then CALL dHTEXT(seq(jgrtek)-sed(jgrtek,k),X,Y,Z) else if (ndraw(34) == 4) then z = n CALL dHTEXT(z,X,Y,Z) else if (ndraw(34) == 5) then z = k CALL dHTEXT(z,X,Y,Z) else if (ndraw(34) == 6) then z = kk CALL dHTEXT(z,X,Y,Z) endif enddo end subroutine tekbanfs subroutine slnabs(n,sx1,sy1) implicit none integer :: n double precision :: sx1,sx2,sy1,sy2 call shipcoor(n,sx1,sy1,sx2,sy2) call lnabs(sx2,sy2) end subroutine slnabs subroutine smovabs(n,sx1,sy1) implicit none integer :: n double precision :: sx1,sx2,sy1,sy2 call shipcoor(n,sx1,sy1,sx2,sy2) call movabs(sx2,sy2) end subroutine smovabs subroutine shtext(n,snum,sx1,sy1) implicit none integer :: n double precision :: snum,sx1,sx2,sy1,sy2 call shipcoor(n,sx1,sy1,sx2,sy2) call htext(snum,sx2,sy2) end subroutine shtext subroutine isosmoothflownode(k) ! smooth isolines in flow cells use m_flowgeom use m_flow use m_netw implicit none integer :: k integer :: nn4, n double precision :: zz(10) nn4 = size(nd(k)%nod) do n = 1, nn4 zz(n) = rnod( nd(k)%nod(n) ) enddo nn4 = min(nn4, size(nd(k)%x) ) call isofil(nd(k)%x, nd(k)%y, zz, nn4, 0) !call isocel(nd(k)%x, nd(k)%y, zz, nn4, 0) end subroutine isosmoothflownode subroutine isosmoothflownode2(k) ! smooth isolines in flow cells use depmax2 use m_flowgeom use m_flow use m_netw implicit none integer :: k integer :: nn4, n double precision :: zz(10) nn4 = size(nd(k)%nod) do n = 1, nn4 zz(n) = rnod( nd(k)%nod(n) ) enddo nn4 = min(nn4, size(nd(k)%x) ) call isofilb(nd(k)%x, nd(k)%y, zz, nn4, 0) end subroutine isosmoothflownode2 subroutine isosmoothnet(k) ! smooth isolines in net cells use m_flowgeom use m_flow use m_netw implicit none integer :: k integer :: nn4, n, inode double precision :: xx(10), yy(10), zz(10) nn4 = size(netcell(k)%nod) do n = 1, nn4 inode = netcell(k)%nod(n) xx(n) = xk(inode) yy(n) = yk(inode) zz(n) = rnod(inode) enddo call isofil(xx, yy, zz, nn4, 0) end subroutine isosmoothnet SUBROUTINE TEXTFLOW() use m_flowgeom !USE M_NETW USE M_FLOW USE M_FLOWTIMES use m_reduce, only : nocg, nogauss, noexpl, nowet use M_RAAITEK use m_statistics USE UNSTRUC_MODEL, only: md_ident use unstruc_colors use m_transport, only: nsubsteps, numnonglobal ! use m_equatorial, only : ampliforced, amplifreeL, amplitotal, ndxforced, ndxfreeL, ndtforced, ndtfreeL, cflforced, cflfreeL, tforce, tfreeL, amplicomp implicit none double precision,external :: znod, zlin double precision :: cpuperstep, solrest, znn, dtav integer :: L, k, n, nn, K3, K4, ja, Li, LL, limtpsa CHARACTER TEX*210 character, save :: TEX1*210 = '@' character, save :: TEX2*210 = '' character, save :: TEX3*210 = '' character(len=3) :: c_nsubsteps character(len=7) :: c_numnonglobal character(len=15) :: c_lts integer, save :: mout = 0 integer, save :: eeini = 0 integer :: ndraw COMMON /DRAWTHIS/ NDRAW(40) if (jtextflow < 1) return if (ndx < 1) return ! erase previous text if ( trim(tex1).ne.'@' ) then call setxor(0) CALL ITEXTCOLOUR('BWHITE','BBLUE') call IClearLine(2) call IClearLine(3) call IClearLine(4) call IClearLine(5) end if ! call setxor(1) TEX = ' ' solrest = 0 if (cpusteps(3)-cpusol(3) .ne. 0) solrest = cpusol(3)/ (cpusteps(3)-cpusol(3)) cpuperstep = max(0d0, min(100d0, (cpusteps(2) - cpusteps(1)) ) ) call maketime(tex,time1) if (dnt-1 > 0) then dtav = (time1-Tstart_user)/ dnt else dtav = dts endif WRITE (TEX(18:),'( A4,F8.3, A8,F7.3, A10,F7.3, A5,F8.1, A10,E7.2, A8,E14.8, A8,E14.8)') & 'dt: ', dts, ' Avg.dt: ', dtav, & ' CPU/step: ', cpuperstep, ' Tot: ', cpusteps(3), ' Sol/Rest: ', solrest , ' Samer: ', samerr, ' Samtot: ', sam1tot ! sam1tot ! samerr CALL ICTEXT(TRIM(TEX),13,2,221) TEX1=TEX nn = min(nplot,ndx) TEX = ' ' if (ndraw(29) <2) then znn = znod(nn) WRITE (TEX,'(A,I3,I6,A,e14.8,A,e14.8,A,e14.8,A,I6,A,I10,A,I5)') & 'k/nplot: ', KPLOT, nplot, ' znod(nn): ', znn, ' Vol1: ', vol1tot, ' Vler: ', volerrcum, & ' #setb: ', int(dsetb), ' #dt: ', int(dnt), ' #itsol: ', itsol else nn = abs(nd(nplot)%ln(1)) znn = zlin(nn) WRITE (TEX,'(A9,I3,1X,I6,1X,A,e14.8,1X,A10,e14.8,1X,A8,e14.8,1X,A7,I6,1X,A5,I10,1X,A8,I5)') & 'k/nplot: ', KPLOT, nplot, 'zlin(nn): ', znn, 'Vol1: ', vol1tot, 'Vler: ', volerrcum, & '#setb: ', int(dsetb), '#dt: ', int(dnt), '#itsol: ', itsol endif CALL ICTEXT(TRIM(TEX),13,3,221) TEX2=TEX TEX = ' ' ! make string for local time-stepping if ( nsubsteps.eq.1 ) then write(c_lts, "(15A)") ' ' else write(c_nsubsteps, "(i3)") min(nsubsteps,999) ! min: safe text width write(c_numnonglobal, "(i7)") min(numnonglobal,9999999) ! min: safe text width c_lts = 'lts:' // trim(adjustl(c_nsubsteps)) // '|' // trim(adjustl(c_numnonglobal)) end if if (kmx == 0) then WRITE (TEX,'( A,i8, A,I8, A,I4, A,I8,1 A,I8, A,I4, A, I2.0, I1, I1, I1, I1, A, A, A15 )') & '#ndx: ' , ndx, ' #lnx: ', lnx, ' #kmx : ', kmx, ' #CG: ', nocg, ' #Gauss: ', nogauss, & ' #s1it: ', nums1it, ' iad: ', iadvec, limtypmom, limtypsa, javasal, jatransportmodule, ' runid: '//trim(md_ident), ' ', c_lts else LL = iabs(nd(nplot)%ln(1)) WRITE (TEX,'( A,i8, A,I8, A,I4, A, F8.5, A, F8.5, A,I4, A, I2.0, I1, I1, I1, I1, A, A, A14)') & '#ndx: ' , ndx, ' #lnx: ', lnx, ' #kmx : ', kmx, ' ustB ', ustb(LL), ' ustW ', ustw(LL), & ' #s1it: ', nums1it, ' iad: ', iadvec, limtypmom, limtypsa, javasal, jatransportmodule, ' runid: '//trim(md_ident), ' ', c_lts endif CALL ICTEXT(TRIM(TEX),13,4,221) TEX3=TEX call setxor(0) call textflowspecific() RETURN END SUBROUTINE subroutine tekprofs() ! and initialise some turb pars use m_flow use m_flowgeom use m_wearelt use M_RAAITEK use m_observations use m_missing use m_polygon use m_wind use m_flowtimes use unstruc_model, only : md_ident implicit none integer :: ini = 0, kt, mout = 0, jaref double precision :: vmin, vmax, ugem, viceld integer :: n, kb, kbn, kbn1, km, km1, k, kk, ku, kd, kku, kkd, Lb0, Lb, Lt, Lm1, L, LL, La double precision :: zmin, zmax double precision :: h0, b0, z00, zinc, cz, cf, ustbref, ustwref, zint, z1, dz2, zz double precision :: tkebot, tkesur, tkewin double precision :: epsbot, epssur, epswin, dzkap, sqcf, ulx, sg, drhodz, rhomea double precision :: VMAX2,VMIN2,DV2,VAL2 integer :: NCOLS2,NV2,NIS2,NIE2,JAAUTO2, is, Ls, LLs, Lbs, Lts integer :: ndraw COMMON /DRAWTHIS/ NDRAW(40) COMMON /DEPMAX2/ VMAX2,VMIN2,DV2,VAL2(256),NCOLS2(256),NV2,NIS2,NIE2,JAAUTO2 if (ndx < 1 .or. kmx < 2 .or. ndraw(35) == 0) return n = nplot kb = kbot(n) kt = ktop(n) if (kt - kb + 1 < 2) then return ! for less than 2 layers endif uLx = 0d0 LL = 0 do kk = 1, nd(n)%lnx L = nd(n)%ln(kk) La = iabs(L) Lb = Lbot(La) is = 1 ; if (L < 0) is = -1 if ( is*u1(Lb) > uLx ) then ! search link with highest outflow velocity LL = La uLx = is*u1(Lb) endif enddo if (LL == 0) then LL = La endif L = LL if (ini == 0) then call MAKEPLOTAREAS(2, 4, 1) ! ndraw(35)) ini = 1 endif b0 = zws(kb-1) h0 = zws(kt) - b0 if (h0 < epshu) return ! h0 = 5d0 ! slope zmin = 0d0 zmax = 1.1d0*h0 ! + 1d0 if (zmaxrai .ne. dmiss .and. zminrai .ne. dmiss) then zmax = zmaxrai - zminrai endif km = kt - kb + 1 km1 = km + 1 ugem = sum(ucx(kb:kt)) / dble(kt - kb + 1) hwref(0) = 0d0 do k = kb,kt kk = k - kb + 1 hcref(kk) = 0.5d0* ( zws(k) + zws(k-1) ) - b0 hwref(kk) = zws(k) - b0 enddo if (bedslope == 0d0 ) then zinc = max(1d-20, ( s1(ln(2,LL)) - s1(ln(1,LL)) )*dxi(LL) ) else zinc = bedslope endif if (zinc > 0) then sg = -1d0 else sg = 1d0 endif zinc = abs(zinc) jaref = index(md_ident,'slope') if (frcuni > 0 .and. jaref > 0 ) then call getczz0 (h0, frcuni, ifrctypuni, cz, z00) ugem = Cz*sqrt(h0*zinc) sqcf = sag/Cz ustbref = sqcf*ugem ! ustb(LL) ustwref = ustw(LL) viceld = vonkar*ustbref*h0/6d0 do k = kb,kt kk = k - kb + 1 ucxref(kk) = sg*ustbref * log( c9of1 + hcref(kk)/z00) / vonkar enddo if (iturbulencemodel == 1) then vicwref = vicoww else if (iturbulencemodel == 2) then do k = 1,km-1 zint = hwref(k) / h0 z1 = 1d0 - zint zz = h0*z1*zint vicwref(k) = zz * ustbref * vonkar enddo vicwref (0) = 0d0 vicwref(km) = 0d0 else if (iturbulencemodel >= 3) then tkebot = ustbref**2/sqcmukep tkewin = ustwref**2/sqcmukep tkesur = max(tkewin,ustbref**2) ! tkesur = 0d0 epsbot = cewall*tkebot**1.5d0 epssur = cewall*tkesur**1.5d0 ! TKE and epsilon at layer interfaces: do k = 1,km-1 zint = hwref(k) / h0 z1 = 1d0 - zint tkin1ref(k) = tkebot * z1 + tkesur * zint teps1ref(k) = (epsbot /zint + epssur / z1)/h0 teps1ref(k) = max(epseps, teps1ref(k) ) vicwref (k) = cmukep*tkin1ref(k)**2/abs(teps1ref(k)) enddo ! TKE, epsilon and mixing coefficients at free surface: tkin1ref(km) = tkesur teps1ref(km) = epssur / ( hwref(km)-hwref(km-1) ) ! TKE, epsilon and mixing coefficients at bed: tkin1ref(0) = tkebot teps1ref(0) = epsbot / ( hwref(1)-hwref(0) )! dzcs(kb) dzkap = vonkar*0.5d0*( hwref(1)-hwref(0) ) teps1ref(0) = epsbot / dzkap vicwref (0) = ustbref * dzkap vicwref(km) = 0d0 endif if (dnt == 0) then ! at initialise : copy refprofiles to solution do LLs = 1,lnx Lbs = Lbot(LLs) ; Lts = Ltop(LLs) do Ls = Lbs, Lts k = Ls-Lbs+1 u1(Ls) = csu(LLs)*ucxref(k) turkin1(Ls) = tkin1ref(k) tureps1(Ls) = teps1ref(k) enddo turkin1(Lbs-1) = tkin1ref(0) tureps1(Lbs-1) = teps1ref(0) enddo endif endif do kk = 1,km-1 kku = kk + 1 k = kb + kk - 1 ku = k + 1 dz2 = ( hcref(kku) - hcref(kk) )**2 if (jaref > 0) dijdijref(kk) = ( ( ucxref(kku) - ucxref(kk) )**2 ) / dz2 dijdij(kk) = ( ( ucx (ku) - ucx (k) )**2 ) / dz2 enddo dijdijref(0) = 0d0 ! ustbref / max(1d-6,vicwref(0) ) dijdij (0) = 0d0 ! ! TEKFN(NSC,NF,JW,X,Y,N,X1,X2,Y1,Y2,NCOL,TITLE,JAUTO,JP,DAG) ! NSC schermnr ! NF functienr ! JW update assen 1 = ja, niet 1 = nee ! JAUTO zelf schalen 1 = ja, niet 1 = nee ! JP teken profielen 1 = ja, niet 1 = teken isolijnen ! in dat geval DAG (nr van de dag) toevoegen Lb = Lbot(L) Lb0 = Lb -1 Lt = Ltop(L) Lm1 = Lt - Lb0 + 1 if (ndraw(35) == 1) then ! turbulence profiles etc vmax = 1.5d0 vmin = -1.5d0 ucm(1:km) = sqrt( ucx(kb:kt)*ucx(kb:kt) + ucy(kb:kt)*ucy(kb:kt) ) vmax = max(vmax, maxval( ucm(1:km) ), vmin+1d-5 ) if (jaref > 0) then call TEKFN(1, 1, 0, ucxref , hcref , km, vmin, vmax, zmin, zmax, 31, 'vel. mag.' , 0, 1 , 0d0,0) ! mid-layers endif call TEKFN(1, 2, 1, ucm(1:km) , hcref , km, vmin, vmax, zmin, zmax, 221, 'vel. mag.' , 0, 2 , 0d0,kplot) !call TEKFN(1, 2, 1, u0((Lb:Lt) , hwref , Lm1, vmin, vmax, zmin, zmax, 221, 'u-velocity' , 0, 2 , 0d0) vmin = 0d0 vmax = 0.0d0 vmax = max(vmax, maxval(vicwwu(Lb0:Lt)), vmin+1d-5 ) if (jaref> 0 ) then call TEKFN(2, 3, 0, vicwref , hwref , km1,vmin, vmax, zmin, zmax, 31, 'vicww' , 0, 1 , 0d0,0) ! mid-layers endif call TEKFN(2, 4, 1, vicwwu(Lb0:) , hwref , Lm1, vmin, vmax, zmin, zmax, 221, 'vicww' , 0, 2 , 0d0,kplot+1) ! vmax = 0.1d0 ; vmin = 0d0 ! if (frcuni > 0 .and. ndraw(35) == 1 ) then ! call TEKFN(3, 5, 0, dijdijref(1:), hwref(1:) , km-1, vmin, vmax, zmin, zmax, 31, 'dijdij' , 0, 1 , 0d0,0) ! interfaces ! endif ! call TEKFN(3, 6, 1, dijdij(1:) , hwref(1:) , km-1, vmin, vmax, zmin, zmax, 221, 'dijdij' , 0, 2 , 0d0,kplot) ! vmin = -0.15d0; vmax = 0.15d0 ! call TEKFN(3, 6, 1, qw(kb:kt) , hwref(1:) , km, vmin, vmax, zmin, zmax, 221, 'qw' , 1, 2 , 0d0,kplot) vmax = max(minval(ww1(kb:kt)), maxval(ww1(kb:kt)) ) vmin = -vmax call TEKFN(3, 6, 1, ww1(kb:kt) , hwref(1:) , km, vmin, vmax, zmin, zmax, 221, 'ww1' , 1, 2 , 0d0,kplot) if (iturbulencemodel >= 3) then vmin = 0d0 vmax = 0d0 vmax = max(vmax, maxval(turkin1(Lb0:Lt)), vmin+1d-5 ) if (frcuni > 0 .and. ndraw(35) == 1 ) then if (jaref > 0) call TEKFN(4, 7, 0, tkin1ref , hwref , km1, vmin, vmax, zmin, zmax, 31, 'tkin1' , 0, 1 , 0d0,0) ! interfaces call TEKFN(4, 8, 1, turkin1(Lb0:Lt), hwref , Lm1, vmin, vmax, zmin, zmax, 221, 'tkin1' , 0, 2 , 0d0,kplot+1) endif vmin = 0d0 vmax = 0.d0 vmax = max(vmax, maxval(tureps1(Lb0:Lt)), vmin+1d-5 ) if (frcuni > 0 .and. ndraw(35) == 1 ) then if (jaref > 0)call TEKFN(5, 9, 0, teps1ref , hwref , km1, vmin, vmax, zmin, zmax, 31, 'teps1' , 0, 1 , 0d0,0) ! interfaces call TEKFN(5,10, 1, tureps1(Lb0:Lt), hwref , Lm1, vmin, vmax, zmin, zmax, 221, 'teps1' , 0, 2 , 0d0,kplot+1) endif endif if (jasal > 0) then vmin = 1d2 vmax = -1d2 vmin = min(vmin, minval(sa1(kb:kt)) ) vmax = max(vmax, maxval(sa1(kb:kt)), vmin+1d-5 ) call TEKFN(6,11, 1, sa1(kb:kt) , hcref , km, vmin, vmax, zmin, zmax, 221, 'sal' , 1, 2 , 0d0,kplot) ! do k = kb,kt-1 ! kk = k-kb+1 ! drhodz = ( rho(k+1) - rho(k) ) / (hcref(kk+1) - hcref(kk)) ! rhomea = 0.5d0*( rho(k+1) + rho(k) ) ! bruva(kk) = coefn2*drhodz ! enddo else if (jatem > 0) then call TEKFN(6,11, 1, tem1(kt:kt) , hcref(kt-kb+1) , 1, 0d0, 86400.d0, -200d0, 600d0, 221, '-200 - 600 WATT' , 0, 2 , 0d0,kplot) CALL TEKHEATS( time1) else if (frcuni > 0 .and. ndraw(35) == 1 ) then ! if (jaref > 0) call TEKFN(5, 9, 0, teps1ref , hwref , km1, vmin, vmax, zmin, zmax, 31, 'teps1' , 0, 1 , 0d0,0) ! interfaces vmin = 0d0 ; vmax = .0024525d0 dijdij(1:km) = sqrt(dijdij(1:km))*vicwwu(Lb:Lt) dijdij(0) = ustb(L)*ustb(L) call TEKFN(6,11, 1, dijdij(0:km), hwref , Lm1, vmin, vmax, zmin, zmax, 221, 'Reyn' , 0, 2 , 0d0,kplot+1) endif endif vmin = 1d2 vmax = -1d2 vmin = min(vmin, minval(ucx(kb:kt)) ) vmax = max(vmax, maxval(ucx(kb:kt)), vmin+1d-5 ) vmax = max(abs(vmin), abs(vmax) ) vmin = -vmax call TEKFN(8, 12, 1, ucx(kb:kt) , hcref , km, vmin, vmax, zmin, zmax, 221, 'x-velocity' , 0, 2 , 0d0,kplot) if (jatem > 0) then vmin = 1d2 ; vmax = -1d2 vmin = min(vmin, minval(tem1(kb:kt)) ) vmax = max(vmax, maxval(tem1(kb:kt)), vmin+1d-5 ) call TEKFN(7, 13, 1, tem1(kb:kt) , hcref , km, vmin, vmax, zmin, zmax, 221, 'temperature' , 0, 2 , 0d0,kplot) else vmin = 1d2 ; vmax = -1d2 vmin = min(vmin, minval(ucy(kb:kt)) ) vmax = max(vmax, maxval(ucy(kb:kt)), vmin+1d-5 ) call TEKFN(7, 13, 1, ucy(kb:kt) , hcref , km, vmin, vmax, zmin, zmax, 221, 'y-velocity' , 0, 2 , 0d0,kplot) endif else if (jasal > 0) then if (vmin2 > vmax2) then vmin = 0d0 vmax = 33d0 else vmin = vmin2 vmax = vmax2 endif if (ndraw(35) == 2) then do n = 1, min(8,numobs) kk = kobs(n) if (kk.lt. 1) cycle call getkbotktop(kk,kb,kt) if (kt > kb) then call TEKFN(n,2*n-1, 1, sa1(kb:kt) , hcref , km, vmin, vmax, zmin, zmax, 221, 'sal' , 0, 2 , 0d0,kplot) endif enddo else if (ndraw(35) == 3) then do n = 1, min(8,npl) call in_flowcell(xpl(n), ypl(n), kk) if (kk == 0) cycle call getkbotktop(kk,kb,kt) if (kt > kb) then call TEKFN(n,2*n-1, 1, sa1(kb:kt) , hcref , km, vmin, vmax, zmin, zmax, 221, 'sal' , 0, 2 , 0d0,kplot) endif enddo endif endif call FULLSCREEN() call setwor(x1,y1,x2,y2) ! reset horizontal world coordinates call tekprofpoint() end subroutine tekprofs SUBROUTINE TEKHEATS( TIMNOW) use m_heatfluxes double precision :: TIMNOW, tday TDAY = modulo (TIMNOW, 1440d0*60d0) CALL GTEXT('SUN',TDAY,QSunav ,221) CALL GTEXT('LWR',TDAY,QLongav ,221) CALL GTEXT('CON',TDAY,QEVAav ,221) CALL GTEXT('EVA',TDAY,QCONav ,221) CALL GTEXT('fre',TDAY,Qfreeav ,221) RETURN END !---------------------------------------------------------------------- ! subroutines from either net.F90 or rest.F90 that are still needed ! without the GUI !---------------------------------------------------------------------- !> write an error-message to the log-file and GUI SUBROUTINE QNERROR(W1,W2,W3) use unstruc_messages use m_devices use unstruc_model, only:MD_AUTOSTARTSTOP, md_jaAutoStart use unstruc_display, only: jaGUI implicit none integer :: infoattribute integer :: k integer :: key integer :: nbck integer :: nfor integer :: l1 integer :: l2 integer :: l3 integer :: nLEVEL COMMON /HELPNOW/ WRDKEY,NLEVEL CHARACTER WRDKEY*40 CHARACTER W1*(*),W2*(*),W3*(*),REC*600 REC = & ' '// & ' '// & ' ' L1 = MAX(1,len_trim(W1)) L2 = MAX(1,len_trim(W2)) L3 = MAX(1,len_trim(W3)) WRITE(REC(1:),'(A)') W1(:L1) WRITE(REC(2+L1:),'(A)') W2(:L2) WRITE(REC(3+L1+L2:),'(A)') W3(:L3) WRITE(msgbuf,'(A)') REC(1:3+L1+L2+L3) call warn_flush() ! No user dialog in batchmode runs: if (md_jaAutoStart == MD_AUTOSTARTSTOP) return if ( jaGUI.eq.1 ) then ! inquire current colors NFOR = InfoAttribute(13) NBCK = InfoAttribute(14) CALL IWinAction ('FCP') ! set error color CALL ITEXTCOLOUR('BWHITE','RED') CALL IWinOpen (1,IHS-2,IWS,3) CALL IWINOUTSTRINGXY(IWS-15,3,'press any key') CALL OKAY(0) CALL ITEXTCOLOUR('BLUE','BWHITE') CALL IWINOutCentre (2,REC(1:3+L1+L2+L3)) ! wait for a key pressed 10 CONTINUE ! CALL INFLUSH() CALL INKEYEVENT(KEY) IF (KEY .EQ. 50 .OR. (KEY .GE. 254 .AND. KEY .LE. 259)) THEN GOTO 10 ELSE CALL GETKEY2(KEY) IF (KEY .GE. 24 .AND. KEY .LE. 26) THEN K = MIN(40,3+L1+L2+L3) WRDKEY = REC(1:K) NLEVEL = 4 CALL FKEYS(KEY) GOTO 10 ENDIF ENDIF CALL IWinClose (1) ! reset colors CALL ITEXTCOLOURN(NFOR, NBCK) else call mess (LEVEL_ERROR, trim(msgbuf) ) endif ! if ( jaGUI.eq.1 ) RETURN END !> plot a statusbar in the GUI SUBROUTINE READYY(TEXT,AF) use m_devices use unstruc_display, only: jaGUI implicit none CHARACTER TEXT*(*), BALK*200 double precision :: af integer, save :: ih integer, save :: ini = 0 integer, save :: iw integer, save :: ixp integer, save :: iyp integer :: naf if ( jaGUI.ne.1 ) return IF (INI .EQ. 0) THEN INI = 1 IXP = 10 IYP = 10 IW = IWS - 10 - 10 IH = 2 CALL ITEXTCOLOUR('BWHITE','BLUE') CALL IWinAction('FCP') CALL IWinOpenTitle(IXP,IYP,IW,IH,TEXT) CALL FILLUP(BALK,' ',IW) CALL ITEXTCOLOUR('BLACK','BWHITE') CALL IWinOutStringXY(2,2,BALK(1:IW)) ELSE NAF = MAX(AF*IW,1d0) CALL FILLUP(BALK,'X',NAF) CALL IWinOutStringXY(1,2,BALK(1:NAF)) ENDIF IF (AF .EQ. -1) THEN CALL IWinClose(1) INI = 0 RETURN ENDIF RETURN END SUBROUTINE CONFRM(TEXT,JAZEKR) use unstruc_display implicit none CHARACTER TEXT*(*) integer :: jazekr integer :: imenutwo integer :: infoattribute integer :: infoinput integer :: iopt integer :: iw integer :: ixp integer :: iyp integer :: key integer :: nbckgr integer :: nforgr integer :: nlevel CHARACTER WRDKEY*40 COMMON /HELPNOW/ WRDKEY,NLEVEL if ( jaGUI.ne.1 ) then if ( jazekr.ne.1 ) then jazekr=0 end if return end if IW = NPOS(3) IXP = NPOS(1) + (IWS-IW)/2 IYP = NPOS(2) ! IXP = INFOCURSOR(1) ! IYP = INFOCURSOR(2) NFORGR = InfoAttribute(13) NBCKGR = InfoAttribute(14) CALL INPOPUP('ON') 20 CONTINUE CALL ITEXTCOLOUR('BWHITE','RED') CALL INHIGHLIGHT('BLUE','BWHITE') CALL TIMLIN() if (jazekr.eq.1) then ! SPvdP: if jazekr.eq.1, default to yes IOPT = IMenuTwo('NO','YES',IXP,IYP,TEXT,1,2) else IOPT = IMenuTwo('NO','YES',IXP,IYP,TEXT,1,1) end if CALL TIMLIN() KEY = InfoInput(55) CALL INFLUSH() IF (KEY .GE. 24 .AND. KEY .LE. 26) THEN NLEVEL = 3 WRDKEY = TEXT CALL FKEYS(KEY) IF (KEY .EQ. 3) THEN CALL INPOPUP('OFF') CALL ITEXTCOLOURN(NFORGR,NBCKGR) RETURN ENDIF GOTO 20 ELSE IF (KEY .EQ. 21 .OR. KEY .EQ. 22) THEN IF (IOPT .EQ. 2) THEN JAZEKR = 1 ELSE JAZEKR = 0 ENDIF ELSE IF (KEY .EQ. 23) THEN JAZEKR = 0 ELSE GOTO 20 ENDIF CALL INPOPUP('OFF') CALL ITEXTCOLOURN(NFORGR,NBCKGR) RETURN END ! SUBROUTINE OKAY(JA) use m_devices use unstruc_display, only: jaGUI implicit none integer :: ja if ( jaGUI.ne.1 ) return CALL ISCREENBELL('ON') IF (JA .EQ. 1) then CALL ISCREENBELL(' ') end if CALL ISCREENBELL('OFF') RETURN END ! plot stencil for higher-order corrections to screen subroutine plotklnup(L) use m_flowgeom implicit none integer, intent(in) :: L !< flowlink number double precision :: sln1, sln2, sln3 integer :: i, ip, k1, k2, kdum integer, dimension(3) :: icolor = (/ 31, 221 , 31 /) i = 0 do ip=0,3,3 i = i+1 k1 = klnup(1+ip,L) sln1 = slnup(1+ip,L) k2 = iabs(klnup(2+ip,L)) sln2 = slnup(2+ip,L) sln3 = slnup(3+ip,L) if ( k1.ne.0 ) then kdum = iabs(k1) call cirr(xz(kdum),yz(kdum),icolor(i)) CALL dHTEXT(sln1,xz(kdum),yz(kdum),0d0) else call cirr(xu(L),yu(L),icolor(3)) end if if ( k1.gt.0 ) then if ( k2.gt.0 ) then call cirr(xz(k2),yz(k2),icolor(i)) CALL dHTEXT(sln2,xz(k2),yz(k2),0d0) CALL dHTEXT(sln3,xu(L),yu(L),0d0) end if end if end do return end subroutine plotklnup !> move probe: !> 7 8 9 !> 4 5 6 !> 1 2 3 subroutine moveprobe(idir, kk, xp, yp) use m_flowgeom use network_data, only: xzw, yzw implicit none integer, intent(in) :: idir !< direction (see keys on keypad) integer, intent(inout) :: kk !< probed flownode number double precision, intent(inout) :: xp, yp !< probed flownode coordinates double precision :: csdir, sndir !< direction vector components double precision :: dum double precision :: dmaxinprod double precision :: cs, sn integer :: i, j, jj, k, k2, L, knext if ( kk.eq.0 .or. idir.eq.5 ) then call in_flowcell(xp, yp, KK) else ! determine direction vector csdir = mod(idir-1,3) - 1d0 sndir = int((idir-1)/3) - 1d0 dum = sqrt(csdir**2+sndir**2) csdir = csdir / dum sndir = sndir / dum !! find next flownode ! knext = 0 ! dmaxinprod = -huge(0d0) ! ! do i=1,size(nd(kk)%nod) ! k = nd(kk)%nod(i) ! do j=1,cn(k)%lnx ! L = iabs(cn(k)%ln(j)) ! do jj=1,2 ! k2 = ln(jj,L) ! if ( k2.eq.kk ) cycle ! ! call getdxdy(xzw(kk),yzw(kk),xzw(k2),yzw(k2),cs,sn) ! dum = sqrt(cs**2+sn**2) ! cs = cs/dum ! sn = sn/dum ! ! dum = csdir*cs + sndir*sn ! ! if ( dum.gt.0d0 .and. dum.gt.dmaxinprod) then ! knext = k2 ! dmaxinprod = dum ! end if ! ! end do ! end do ! end do ! find next flownode knext = 0 dmaxinprod = -huge(0d0) do i=1,nd(kk)%lnx L = nd(kk)%ln(i) if ( L.lt.0 ) then dum = csdir*csu(-L) + sndir*snu(-L) else dum = -(csdir*csu(L) + sndir*snu(L)) end if if ( dum.gt.0d0 .and. dum.gt.dmaxinprod) then knext = ln(1,iabs(L))+ln(2,iabs(L))-kk dmaxinprod = dum end if end do if ( knext.ne.0 ) then kk = knext xp = xzw(kk) yp = yzw(kk) end if end if return end subroutine moveprobe