├── scisola_tools ├── scisola2http │ ├── scisola │ │ ├── images │ │ │ ├── index.html │ │ │ ├── bar.png │ │ │ ├── bar_mt.png │ │ │ ├── footer.png │ │ │ ├── header.png │ │ │ ├── background.png │ │ │ ├── footer_mt.png │ │ │ ├── header_mt.png │ │ │ ├── background_mt.png │ │ │ └── linkrollover.png │ │ ├── style.css │ │ ├── list.js │ │ └── style_mt.css │ ├── httpserver.sh │ └── readme ├── ISOLA │ ├── dsretc │ ├── elemse │ ├── gr_xyz │ ├── kagan │ ├── isola12c │ ├── norm12c │ ├── compile.sh │ ├── invert │ │ ├── newpause.for │ │ ├── ang.inc │ │ ├── determi.inc │ │ ├── line.inc │ │ ├── lubksb.inc │ │ ├── zbrac.inc │ │ ├── rtbis.inc │ │ ├── subevnt.inc │ │ ├── subevnt_12c.inc │ │ ├── fw.inc │ │ ├── dsretc.lst │ │ ├── subevnt_vol.inc │ │ ├── subevntNEW.inc │ │ ├── subcas.inc │ │ ├── ludcmp.inc │ │ ├── fcoolr.inc │ │ ├── eleonly.inc │ │ ├── eleonly_12c.inc │ │ ├── angles.inc │ │ ├── SUBEVNT3.INC │ │ ├── subevnt3_12c.inc │ │ ├── manidata.inc │ │ ├── manidatasyn.inc │ │ ├── jacobi.inc │ │ ├── manidata_12c.inc │ │ ├── manidatacut.inc │ │ ├── oneinv3.inc │ │ ├── oneinv3_12c.inc │ │ ├── jacobinr.inc │ │ ├── filter.inc │ │ ├── elecas.inc │ │ ├── elecas_12c.inc │ │ ├── filtersyn.inc │ │ ├── oneinv2.inc │ │ └── oneinv2_12c.inc │ └── green │ │ ├── param.inc │ │ ├── dimen1.inc │ │ ├── fcoolr.inc │ │ └── dimen2.inc ├── screenshots │ ├── 1.png │ ├── 2.png │ ├── 3.png │ ├── 4.png │ ├── 5.png │ ├── 6.png │ ├── 7.png │ ├── 8.png │ ├── Screenshot-1.png │ ├── Screenshot-Settings.png │ ├── Screenshot-review-1.png │ ├── Screenshot-review-6.png │ ├── Screenshot-review-7.png │ ├── Screenshot-review-8.png │ ├── Screenshot-review-9.png │ ├── Screenshot-review.png │ ├── Screenshot-scisola.png │ ├── Screenshot-search.png │ ├── Screenshot-stations.png │ ├── Screenshot-Settings-1.png │ ├── Screenshot-Settings-2.png │ ├── Screenshot-Settings-3.png │ ├── Screenshot-review-10.png │ ├── Screenshot-review-11.png │ ├── Screenshot-scisola-1.png │ ├── Screenshot-scisola_buttons.png │ └── Screenshot-database configuration.png ├── ISOLA17 │ ├── invert │ │ ├── newpause.inc │ │ ├── ang.inc │ │ ├── determi.inc │ │ ├── line.inc │ │ ├── lubksb.inc │ │ ├── zbrac.inc │ │ ├── rtbis.inc │ │ ├── subevnt15.inc │ │ ├── ludcmp.inc │ │ ├── angles.inc │ │ ├── jacobi.inc │ │ ├── jacobinr.inc │ │ └── manidata15.inc │ ├── compile.sh │ └── green │ │ ├── param.inc │ │ ├── err.txt │ │ ├── dimen1.inc │ │ └── dimen2.inc ├── delete_monthly │ ├── README │ └── empty.sh ├── updatedb_daily │ ├── README │ ├── stations.txt │ ├── alter.sh │ └── update_db.py ├── ISOLA15 │ ├── invert │ │ ├── readme_compiling_changes !!!! │ │ ├── compileGF.bat │ │ ├── ang.inc │ │ ├── determi.inc │ │ ├── line.inc │ │ ├── read_special_compilation │ │ ├── lubksb.inc │ │ ├── zbrac.inc │ │ ├── rtbis.inc │ │ ├── subevnt15.inc │ │ ├── ludcmp.inc │ │ ├── ISOLA_2015_readme │ │ ├── angles.inc │ │ ├── jacobi.inc │ │ ├── jacobinr.inc │ │ └── manidata15.inc │ ├── compile.sh │ └── green │ │ ├── param.inc │ │ ├── dimen1.inc │ │ ├── fcoolr.inc │ │ └── dimen2.inc ├── crustal.dat ├── setup.sh ├── playback.sh ├── requirements.txt └── examples │ └── example.py ├── scisola_dev ├── dsg │ ├── logo │ │ ├── logo.png │ │ ├── logo.xcf │ │ ├── logo2.png │ │ ├── logo3.png │ │ ├── logo4.png │ │ ├── logo5.png │ │ ├── logo6.png │ │ ├── beachball.png │ │ ├── icons │ │ │ ├── about.png │ │ │ ├── edit.png │ │ │ ├── help.png │ │ │ ├── left.png │ │ │ ├── logo5.png │ │ │ ├── logo6.png │ │ │ ├── play.png │ │ │ ├── right.png │ │ │ ├── start.png │ │ │ ├── stop.png │ │ │ ├── browse.png │ │ │ ├── delete.png │ │ │ ├── refresh.png │ │ │ ├── revise.png │ │ │ ├── search.png │ │ │ ├── update.png │ │ │ ├── beachball.png │ │ │ ├── configure.png │ │ │ └── icons.qrc │ │ ├── beachball_large.png │ │ └── beachball.py │ ├── scisola_db.mwb │ ├── ui2py.sh │ ├── about.ui │ └── stations.ui └── README ├── scisola ├── README ├── src │ ├── __init__.py │ ├── lib │ │ ├── __init__.py │ │ ├── gui │ │ │ ├── __init__.py │ │ │ ├── about.py │ │ │ └── stations.py │ │ ├── origin.py │ │ ├── settings.py │ │ └── logger.py │ ├── about.py │ ├── search.py │ └── database.py └── scisola.py └── README.md /scisola_tools/scisola2http/scisola/images/index.html: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /scisola_tools/ISOLA/dsretc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nikosT/scisola/HEAD/scisola_tools/ISOLA/dsretc -------------------------------------------------------------------------------- /scisola_tools/ISOLA/elemse: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nikosT/scisola/HEAD/scisola_tools/ISOLA/elemse -------------------------------------------------------------------------------- /scisola_tools/ISOLA/gr_xyz: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nikosT/scisola/HEAD/scisola_tools/ISOLA/gr_xyz -------------------------------------------------------------------------------- /scisola_tools/ISOLA/kagan: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nikosT/scisola/HEAD/scisola_tools/ISOLA/kagan -------------------------------------------------------------------------------- /scisola_dev/dsg/logo/logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nikosT/scisola/HEAD/scisola_dev/dsg/logo/logo.png -------------------------------------------------------------------------------- /scisola_dev/dsg/logo/logo.xcf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nikosT/scisola/HEAD/scisola_dev/dsg/logo/logo.xcf -------------------------------------------------------------------------------- /scisola_tools/ISOLA/isola12c: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nikosT/scisola/HEAD/scisola_tools/ISOLA/isola12c -------------------------------------------------------------------------------- /scisola_tools/ISOLA/norm12c: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nikosT/scisola/HEAD/scisola_tools/ISOLA/norm12c -------------------------------------------------------------------------------- /scisola_dev/dsg/logo/logo2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nikosT/scisola/HEAD/scisola_dev/dsg/logo/logo2.png -------------------------------------------------------------------------------- /scisola_dev/dsg/logo/logo3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nikosT/scisola/HEAD/scisola_dev/dsg/logo/logo3.png -------------------------------------------------------------------------------- /scisola_dev/dsg/logo/logo4.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nikosT/scisola/HEAD/scisola_dev/dsg/logo/logo4.png -------------------------------------------------------------------------------- /scisola_dev/dsg/logo/logo5.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nikosT/scisola/HEAD/scisola_dev/dsg/logo/logo5.png -------------------------------------------------------------------------------- /scisola_dev/dsg/logo/logo6.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nikosT/scisola/HEAD/scisola_dev/dsg/logo/logo6.png -------------------------------------------------------------------------------- /scisola_dev/dsg/scisola_db.mwb: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nikosT/scisola/HEAD/scisola_dev/dsg/scisola_db.mwb -------------------------------------------------------------------------------- /scisola_tools/screenshots/1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nikosT/scisola/HEAD/scisola_tools/screenshots/1.png -------------------------------------------------------------------------------- /scisola_tools/screenshots/2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nikosT/scisola/HEAD/scisola_tools/screenshots/2.png -------------------------------------------------------------------------------- /scisola_tools/screenshots/3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nikosT/scisola/HEAD/scisola_tools/screenshots/3.png -------------------------------------------------------------------------------- /scisola_tools/screenshots/4.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nikosT/scisola/HEAD/scisola_tools/screenshots/4.png -------------------------------------------------------------------------------- /scisola_tools/screenshots/5.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nikosT/scisola/HEAD/scisola_tools/screenshots/5.png -------------------------------------------------------------------------------- /scisola_tools/screenshots/6.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nikosT/scisola/HEAD/scisola_tools/screenshots/6.png -------------------------------------------------------------------------------- /scisola_tools/screenshots/7.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nikosT/scisola/HEAD/scisola_tools/screenshots/7.png -------------------------------------------------------------------------------- /scisola_tools/screenshots/8.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nikosT/scisola/HEAD/scisola_tools/screenshots/8.png -------------------------------------------------------------------------------- /scisola_dev/dsg/logo/beachball.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nikosT/scisola/HEAD/scisola_dev/dsg/logo/beachball.png -------------------------------------------------------------------------------- /scisola_dev/dsg/logo/icons/about.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nikosT/scisola/HEAD/scisola_dev/dsg/logo/icons/about.png -------------------------------------------------------------------------------- /scisola_dev/dsg/logo/icons/edit.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nikosT/scisola/HEAD/scisola_dev/dsg/logo/icons/edit.png -------------------------------------------------------------------------------- /scisola_dev/dsg/logo/icons/help.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nikosT/scisola/HEAD/scisola_dev/dsg/logo/icons/help.png -------------------------------------------------------------------------------- /scisola_dev/dsg/logo/icons/left.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nikosT/scisola/HEAD/scisola_dev/dsg/logo/icons/left.png -------------------------------------------------------------------------------- /scisola_dev/dsg/logo/icons/logo5.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nikosT/scisola/HEAD/scisola_dev/dsg/logo/icons/logo5.png -------------------------------------------------------------------------------- /scisola_dev/dsg/logo/icons/logo6.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nikosT/scisola/HEAD/scisola_dev/dsg/logo/icons/logo6.png -------------------------------------------------------------------------------- /scisola_dev/dsg/logo/icons/play.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nikosT/scisola/HEAD/scisola_dev/dsg/logo/icons/play.png -------------------------------------------------------------------------------- /scisola_dev/dsg/logo/icons/right.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nikosT/scisola/HEAD/scisola_dev/dsg/logo/icons/right.png -------------------------------------------------------------------------------- /scisola_dev/dsg/logo/icons/start.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nikosT/scisola/HEAD/scisola_dev/dsg/logo/icons/start.png -------------------------------------------------------------------------------- /scisola_dev/dsg/logo/icons/stop.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nikosT/scisola/HEAD/scisola_dev/dsg/logo/icons/stop.png -------------------------------------------------------------------------------- /scisola_dev/dsg/logo/icons/browse.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nikosT/scisola/HEAD/scisola_dev/dsg/logo/icons/browse.png -------------------------------------------------------------------------------- /scisola_dev/dsg/logo/icons/delete.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nikosT/scisola/HEAD/scisola_dev/dsg/logo/icons/delete.png -------------------------------------------------------------------------------- /scisola_dev/dsg/logo/icons/refresh.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nikosT/scisola/HEAD/scisola_dev/dsg/logo/icons/refresh.png -------------------------------------------------------------------------------- /scisola_dev/dsg/logo/icons/revise.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nikosT/scisola/HEAD/scisola_dev/dsg/logo/icons/revise.png -------------------------------------------------------------------------------- /scisola_dev/dsg/logo/icons/search.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nikosT/scisola/HEAD/scisola_dev/dsg/logo/icons/search.png -------------------------------------------------------------------------------- /scisola_dev/dsg/logo/icons/update.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nikosT/scisola/HEAD/scisola_dev/dsg/logo/icons/update.png -------------------------------------------------------------------------------- /scisola_dev/dsg/logo/beachball_large.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nikosT/scisola/HEAD/scisola_dev/dsg/logo/beachball_large.png -------------------------------------------------------------------------------- /scisola_dev/dsg/logo/icons/beachball.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nikosT/scisola/HEAD/scisola_dev/dsg/logo/icons/beachball.png -------------------------------------------------------------------------------- /scisola_dev/dsg/logo/icons/configure.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nikosT/scisola/HEAD/scisola_dev/dsg/logo/icons/configure.png -------------------------------------------------------------------------------- /scisola_tools/screenshots/Screenshot-1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nikosT/scisola/HEAD/scisola_tools/screenshots/Screenshot-1.png -------------------------------------------------------------------------------- /scisola_dev/dsg/logo/beachball.py: -------------------------------------------------------------------------------- 1 | from obspy.imaging.beachball import Beachball 2 | np1 = [285, 40, -45] 3 | Beachball(np1, facecolor='r') 4 | -------------------------------------------------------------------------------- /scisola_tools/scisola2http/scisola/images/bar.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nikosT/scisola/HEAD/scisola_tools/scisola2http/scisola/images/bar.png -------------------------------------------------------------------------------- /scisola_tools/screenshots/Screenshot-Settings.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nikosT/scisola/HEAD/scisola_tools/screenshots/Screenshot-Settings.png -------------------------------------------------------------------------------- /scisola_tools/screenshots/Screenshot-review-1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nikosT/scisola/HEAD/scisola_tools/screenshots/Screenshot-review-1.png -------------------------------------------------------------------------------- /scisola_tools/screenshots/Screenshot-review-6.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nikosT/scisola/HEAD/scisola_tools/screenshots/Screenshot-review-6.png -------------------------------------------------------------------------------- /scisola_tools/screenshots/Screenshot-review-7.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nikosT/scisola/HEAD/scisola_tools/screenshots/Screenshot-review-7.png -------------------------------------------------------------------------------- /scisola_tools/screenshots/Screenshot-review-8.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nikosT/scisola/HEAD/scisola_tools/screenshots/Screenshot-review-8.png -------------------------------------------------------------------------------- /scisola_tools/screenshots/Screenshot-review-9.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nikosT/scisola/HEAD/scisola_tools/screenshots/Screenshot-review-9.png -------------------------------------------------------------------------------- /scisola_tools/screenshots/Screenshot-review.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nikosT/scisola/HEAD/scisola_tools/screenshots/Screenshot-review.png -------------------------------------------------------------------------------- /scisola_tools/screenshots/Screenshot-scisola.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nikosT/scisola/HEAD/scisola_tools/screenshots/Screenshot-scisola.png -------------------------------------------------------------------------------- /scisola_tools/screenshots/Screenshot-search.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nikosT/scisola/HEAD/scisola_tools/screenshots/Screenshot-search.png -------------------------------------------------------------------------------- /scisola_tools/screenshots/Screenshot-stations.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nikosT/scisola/HEAD/scisola_tools/screenshots/Screenshot-stations.png -------------------------------------------------------------------------------- /scisola_tools/screenshots/Screenshot-Settings-1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nikosT/scisola/HEAD/scisola_tools/screenshots/Screenshot-Settings-1.png -------------------------------------------------------------------------------- /scisola_tools/screenshots/Screenshot-Settings-2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nikosT/scisola/HEAD/scisola_tools/screenshots/Screenshot-Settings-2.png -------------------------------------------------------------------------------- /scisola_tools/screenshots/Screenshot-Settings-3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nikosT/scisola/HEAD/scisola_tools/screenshots/Screenshot-Settings-3.png -------------------------------------------------------------------------------- /scisola_tools/screenshots/Screenshot-review-10.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nikosT/scisola/HEAD/scisola_tools/screenshots/Screenshot-review-10.png -------------------------------------------------------------------------------- /scisola_tools/screenshots/Screenshot-review-11.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nikosT/scisola/HEAD/scisola_tools/screenshots/Screenshot-review-11.png -------------------------------------------------------------------------------- /scisola_tools/screenshots/Screenshot-scisola-1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nikosT/scisola/HEAD/scisola_tools/screenshots/Screenshot-scisola-1.png -------------------------------------------------------------------------------- /scisola/README: -------------------------------------------------------------------------------- 1 | scisola 2 | 3 | Open-source python based software for automatic Moment Tensor calculation of events provided by SeisComP3 in real-time 4 | -------------------------------------------------------------------------------- /scisola_dev/README: -------------------------------------------------------------------------------- 1 | scisola 2 | 3 | Open-source python based software for automatic Moment Tensor calculation of events provided by SeisComP3 in real-time 4 | -------------------------------------------------------------------------------- /scisola_tools/ISOLA17/invert/newpause.inc: -------------------------------------------------------------------------------- 1 | subroutine newpause(a) 2 | character(len=*) a 3 | write(*,*) a 4 | read(*,*) 5 | end -------------------------------------------------------------------------------- /scisola_tools/scisola2http/scisola/images/bar_mt.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nikosT/scisola/HEAD/scisola_tools/scisola2http/scisola/images/bar_mt.png -------------------------------------------------------------------------------- /scisola_tools/scisola2http/scisola/images/footer.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nikosT/scisola/HEAD/scisola_tools/scisola2http/scisola/images/footer.png -------------------------------------------------------------------------------- /scisola_tools/scisola2http/scisola/images/header.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nikosT/scisola/HEAD/scisola_tools/scisola2http/scisola/images/header.png -------------------------------------------------------------------------------- /scisola_tools/delete_monthly/README: -------------------------------------------------------------------------------- 1 | 2 | 3 | Delete old events ( >= 1 month older) in order to maintain free space on disk by adding the .sh script in cron. 4 | -------------------------------------------------------------------------------- /scisola_tools/scisola2http/scisola/images/background.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nikosT/scisola/HEAD/scisola_tools/scisola2http/scisola/images/background.png -------------------------------------------------------------------------------- /scisola_tools/scisola2http/scisola/images/footer_mt.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nikosT/scisola/HEAD/scisola_tools/scisola2http/scisola/images/footer_mt.png -------------------------------------------------------------------------------- /scisola_tools/scisola2http/scisola/images/header_mt.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nikosT/scisola/HEAD/scisola_tools/scisola2http/scisola/images/header_mt.png -------------------------------------------------------------------------------- /scisola_tools/screenshots/Screenshot-scisola_buttons.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nikosT/scisola/HEAD/scisola_tools/screenshots/Screenshot-scisola_buttons.png -------------------------------------------------------------------------------- /scisola_tools/scisola2http/scisola/images/background_mt.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nikosT/scisola/HEAD/scisola_tools/scisola2http/scisola/images/background_mt.png -------------------------------------------------------------------------------- /scisola_tools/scisola2http/scisola/images/linkrollover.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nikosT/scisola/HEAD/scisola_tools/scisola2http/scisola/images/linkrollover.png -------------------------------------------------------------------------------- /scisola_tools/screenshots/Screenshot-database configuration.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nikosT/scisola/HEAD/scisola_tools/screenshots/Screenshot-database configuration.png -------------------------------------------------------------------------------- /scisola_tools/updatedb_daily/README: -------------------------------------------------------------------------------- 1 | 2 | Update the scisola database from SeisComP3 database as well as appling the stations.txt priorities daily by adding the .sh script in cron. 3 | -------------------------------------------------------------------------------- /scisola_tools/updatedb_daily/stations.txt: -------------------------------------------------------------------------------- 1 | network,code,latitude,longitude,priority 2 | HL,ALNA,39.14804,23.86669,0 3 | HL,ARG,36.21356,28.12122,4 4 | HL,APE,37.07274,25.52301,5 5 | -------------------------------------------------------------------------------- /scisola_tools/ISOLA15/invert/readme_compiling_changes !!!!: -------------------------------------------------------------------------------- 1 | Always when editing ANY *.for code here, run COPYNEWNAMES.BAT. 2 | It is necessary because isola GUI is expecting some fixed code names!!!!!!!! -------------------------------------------------------------------------------- /scisola_tools/ISOLA/compile.sh: -------------------------------------------------------------------------------- 1 | 2 | # invert 3 | gfortran invert/isola12c.for -o isola12c 4 | gfortran invert/norm12c.for -o norm12c 5 | gfortran invert/dsretc.for -o dsretc 6 | gfortran invert/kagan.for -o kagan 7 | 8 | 9 | # green 10 | gfortran green/gr_xyz.for -o gr_xyz 11 | gfortran green/Elemse.for -o elemse 12 | 13 | -------------------------------------------------------------------------------- /scisola_tools/ISOLA/invert/newpause.for: -------------------------------------------------------------------------------- 1 | character *8 a 2 | 3 | a="message1" 4 | 5 | call newpause(a) 6 | 7 | stop 8 | end 9 | 10 | subroutine newpause(a) 11 | character *8 a 12 | write(*,*) a 13 | read(*,*) 14 | end -------------------------------------------------------------------------------- /scisola_tools/ISOLA15/compile.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | # invert 4 | gfortran invert/isola15.for -O2 -o isola12c 5 | gfortran invert/norm15.for -O2 -o norm12c 6 | gfortran invert/dsretc.for -O2 -o dsretc 7 | gfortran invert/kagan.for -O2 -o kagan 8 | 9 | # green 10 | gfortran green/gr_xyz.for -O2 -o gr_xyz 11 | gfortran green/Elemse.for -O2 -o elemse 12 | 13 | 14 | -------------------------------------------------------------------------------- /scisola_tools/ISOLA17/invert/ang.inc: -------------------------------------------------------------------------------- 1 | REAL FUNCTION ANG (A,B) 2 | C 3 | DIMENSION A(3),B(3) 4 | FAC=180./3.14159 5 | AA=SQRT(A(1)*A(1)+A(2)*A(2)+A(3)*A(3)) 6 | BB=SQRT(B(1)*B(1)+B(2)*B(2)+B(3)*B(3)) 7 | CAB=(A(1)*B(1)+A(2)*B(2)+A(3)*B(3))/AA/BB 8 | SAB=SQRT(ABS(1.-CAB*CAB)) 9 | IF (CAB.NE.0.) THEN 10 | ANG=ATAN(SAB/CAB)*FAC 11 | ELSE 12 | ANG=90. 13 | ENDIF 14 | RETURN 15 | END -------------------------------------------------------------------------------- /scisola_tools/ISOLA/invert/ang.inc: -------------------------------------------------------------------------------- 1 | REAL FUNCTION ANG (A,B) 2 | C 3 | DIMENSION A(3),B(3) 4 | FAC=180./3.14159 5 | AA=SQRT(A(1)*A(1)+A(2)*A(2)+A(3)*A(3)) 6 | BB=SQRT(B(1)*B(1)+B(2)*B(2)+B(3)*B(3)) 7 | CAB=(A(1)*B(1)+A(2)*B(2)+A(3)*B(3))/AA/BB 8 | SAB=SQRT(ABS(1.-CAB*CAB)) 9 | IF (CAB.NE.0.) THEN 10 | ANG=ATAN(SAB/CAB)*FAC 11 | ELSE 12 | ANG=90. 13 | ENDIF 14 | RETURN 15 | END 16 | -------------------------------------------------------------------------------- /scisola_tools/ISOLA15/invert/compileGF.bat: -------------------------------------------------------------------------------- 1 | gfortran isola15.for -o isola12c.exe 2 | 3 | pause 4 | 5 | gfortran norm15.for -o norm12c.exe 6 | 7 | pause 8 | 9 | gfortran isola12c_jack.for -o isola12c_jack.exe 10 | 11 | pause 12 | 13 | gfortran iso12c.for -o iso12c.exe 14 | 15 | pause 16 | 17 | gfortran norm12c.for -o norm12c.exe 18 | 19 | pause 20 | 21 | gfortran dsretc.for -o dsretc.exe 22 | 23 | del *.obj 24 | 25 | copy *.exe .. -------------------------------------------------------------------------------- /scisola_tools/delete_monthly/empty.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | cur_year=`date -u +%Y` 4 | previous_month=`date --date='-1 month' +%m` 5 | 6 | path='my_path' # path to results folder as set in scisola settings 7 | 8 | find $path/${cur_year}${previous_month}* -name "inversion" -type d -exec rm -r {} + 9 | find $path/${cur_year}${previous_month}* -name "stream" -type d -exec rm -r {} + 10 | find $path/${cur_year}${previous_month}* -name "streams" -type d -exec rm -r {} + 11 | 12 | -------------------------------------------------------------------------------- /scisola_tools/ISOLA15/invert/ang.inc: -------------------------------------------------------------------------------- 1 | REAL FUNCTION ANG (A,B) 2 | C 3 | DIMENSION A(3),B(3) 4 | FAC=180./3.14159 5 | AA=SQRT(A(1)*A(1)+A(2)*A(2)+A(3)*A(3)) 6 | BB=SQRT(B(1)*B(1)+B(2)*B(2)+B(3)*B(3)) 7 | CAB=(A(1)*B(1)+A(2)*B(2)+A(3)*B(3))/AA/BB 8 | SAB=SQRT(ABS(1.-CAB*CAB)) 9 | IF (CAB.NE.0.) THEN 10 | ANG=ATAN(SAB/CAB)*FAC 11 | ELSE 12 | ANG=90. 13 | ENDIF 14 | RETURN 15 | END 16 | -------------------------------------------------------------------------------- /scisola_tools/ISOLA17/invert/determi.inc: -------------------------------------------------------------------------------- 1 | 2 | function DETERMI(xlam) 3 | 4 | dimension andc(6),a2(6),b(6) 5 | 6 | common /constraint/ andc,a2,b 7 | 8 | nmom=5 9 | 10 | do n=1,nmom 11 | a2(n)=andc(n) - xlam * b(n) 12 | enddo 13 | 14 | DETERMI=a2(4)*a2(4)*a2(5)+a2(4)*a2(5)*a2(5)+a2(3)*a2(3)*a2(4)- 15 | * a2(1)*a2(1)*a2(4)-a2(1)*a2(1)*a2(5)+a2(2)*a2(2)*a2(5)- 16 | * 2.*a2(1)*a2(2)*a2(3) 17 | 18 | 19 | RETURN 20 | END 21 | -------------------------------------------------------------------------------- /scisola_tools/ISOLA/invert/determi.inc: -------------------------------------------------------------------------------- 1 | 2 | function DETERMI(xlam) 3 | 4 | dimension andc(6),a2(6),b(6) 5 | 6 | common /constraint/ andc,a2,b 7 | 8 | nmom=5 9 | 10 | do n=1,nmom 11 | a2(n)=andc(n) - xlam * b(n) 12 | enddo 13 | 14 | DETERMI=a2(4)*a2(4)*a2(5)+a2(4)*a2(5)*a2(5)+a2(3)*a2(3)*a2(4)- 15 | * a2(1)*a2(1)*a2(4)-a2(1)*a2(1)*a2(5)+a2(2)*a2(2)*a2(5)- 16 | * 2.*a2(1)*a2(2)*a2(3) 17 | 18 | 19 | RETURN 20 | END 21 | 22 | -------------------------------------------------------------------------------- /scisola_tools/ISOLA15/invert/determi.inc: -------------------------------------------------------------------------------- 1 | 2 | function DETERMI(xlam) 3 | 4 | dimension andc(6),a2(6),b(6) 5 | 6 | common /constraint/ andc,a2,b 7 | 8 | nmom=5 9 | 10 | do n=1,nmom 11 | a2(n)=andc(n) - xlam * b(n) 12 | enddo 13 | 14 | DETERMI=a2(4)*a2(4)*a2(5)+a2(4)*a2(5)*a2(5)+a2(3)*a2(3)*a2(4)- 15 | * a2(1)*a2(1)*a2(4)-a2(1)*a2(1)*a2(5)+a2(2)*a2(2)*a2(5)- 16 | * 2.*a2(1)*a2(2)*a2(3) 17 | 18 | 19 | RETURN 20 | END 21 | -------------------------------------------------------------------------------- /scisola_tools/ISOLA17/invert/line.inc: -------------------------------------------------------------------------------- 1 | SUBROUTINE LINE (A,T,N) 2 | DIMENSION A(3),T(3,3) 3 | C 4 | DO 240 KK=1,N 5 | AM=A(KK) 6 | DO 200 K=KK,N 7 | IF(A(K).GT.AM) AM=A(K) 8 | 200 CONTINUE 9 | DO 210 K=KK,N 10 | IF (A(K).EQ.AM) GOTO 220 11 | 210 CONTINUE 12 | 220 A(K)=A(KK) 13 | A(KK)=AM 14 | DO 230 J=1,3 15 | P9=T(J,K) 16 | T(J,K)=T(J,KK) 17 | 230 T(J,KK)=P9 18 | 240 CONTINUE 19 | C 20 | c write(*,*) 'line' 21 | RETURN 22 | END 23 | -------------------------------------------------------------------------------- /scisola_tools/ISOLA/invert/line.inc: -------------------------------------------------------------------------------- 1 | SUBROUTINE LINE (A,T,N) 2 | DIMENSION A(3),T(3,3) 3 | C 4 | DO 240 KK=1,N 5 | AM=A(KK) 6 | DO 200 K=KK,N 7 | IF(A(K).GT.AM) AM=A(K) 8 | 200 CONTINUE 9 | DO 210 K=KK,N 10 | IF (A(K).EQ.AM) GOTO 220 11 | 210 CONTINUE 12 | 220 A(K)=A(KK) 13 | A(KK)=AM 14 | DO 230 J=1,3 15 | P9=T(J,K) 16 | T(J,K)=T(J,KK) 17 | 230 T(J,KK)=P9 18 | 240 CONTINUE 19 | C 20 | c write(*,*) 'line' 21 | RETURN 22 | END 23 | C 24 | -------------------------------------------------------------------------------- /scisola_tools/ISOLA15/invert/line.inc: -------------------------------------------------------------------------------- 1 | SUBROUTINE LINE (A,T,N) 2 | DIMENSION A(3),T(3,3) 3 | C 4 | DO 240 KK=1,N 5 | AM=A(KK) 6 | DO 200 K=KK,N 7 | IF(A(K).GT.AM) AM=A(K) 8 | 200 CONTINUE 9 | DO 210 K=KK,N 10 | IF (A(K).EQ.AM) GOTO 220 11 | 210 CONTINUE 12 | 220 A(K)=A(KK) 13 | A(KK)=AM 14 | DO 230 J=1,3 15 | P9=T(J,K) 16 | T(J,K)=T(J,KK) 17 | 230 T(J,KK)=P9 18 | 240 CONTINUE 19 | C 20 | c write(*,*) 'line' 21 | RETURN 22 | END 23 | C 24 | -------------------------------------------------------------------------------- /scisola_tools/ISOLA17/compile.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | flags='-O2 -m32 -std=legacy -fbacktrace -ffpe-trap=zero,overflow,underflow -fbounds-check -Wall -Wextra -Wconversion -Wunused-parameter' 4 | 5 | flags2="-m32 -O2 -ggdb -fbacktrace" 6 | 7 | # green 8 | gfortran green/gr_xyz.for $flags -o gr_xyz 9 | gfortran green/elemse.for $flags -o elemse 10 | 11 | # invert 12 | gfortran invert/isola15.for $flags2 -ffpe-summary='none' -o isola12c 13 | gfortran invert/norm15.for $flags2 -ffpe-summary='none' -o norm12c 14 | gfortran invert/dsretc.for $flags -o dsretc 15 | gfortran invert/kagan.for $flags -o kagan 16 | 17 | -------------------------------------------------------------------------------- /scisola_tools/ISOLA15/invert/read_special_compilation: -------------------------------------------------------------------------------- 1 | Codes time_fixed15.for and time_loop15.for 2 | need a special compilation!!!! 3 | 4 | Example (for time_fixed15) 5 | rem COMPILE time_fixed15.for, tinv.f90 and nnls.f90 SEPARATELY, 6 | rem The compilation requires precision.mod and various *inc files (as ISOLA) 7 | rem (it reports errors, but it creares *.obj files !!!!!!!) 8 | 9 | rem example how to compile in my PC 10 | rem tr time_fixed15.for 11 | rem tr tinv.f90 12 | rem tr nnls.f90 13 | 14 | rem Then LINK the three *.obj files to create time_fixed15.exe 15 | rem link time_fixed15 tinv nnls 16 | -------------------------------------------------------------------------------- /scisola_tools/ISOLA17/invert/lubksb.inc: -------------------------------------------------------------------------------- 1 | 2 | SUBROUTINE LUBKSB(A,N,NP,INDX,B) 3 | DIMENSION A(NP,NP),INDX(N),B(N) 4 | II=0 5 | DO 12 I=1,N 6 | LL=INDX(I) 7 | SUM=B(LL) 8 | B(LL)=B(I) 9 | IF (II.NE.0)THEN 10 | DO 11 J=II,I-1 11 | SUM=SUM-A(I,J)*B(J) 12 | 11 CONTINUE 13 | ELSE IF (SUM.NE.0.) THEN 14 | II=I 15 | ENDIF 16 | B(I)=SUM 17 | 12 CONTINUE 18 | DO 14 I=N,1,-1 19 | SUM=B(I) 20 | DO 13 J=I+1,N 21 | SUM=SUM-A(I,J)*B(J) 22 | 13 CONTINUE 23 | B(I)=SUM/A(I,I) 24 | 14 CONTINUE 25 | RETURN 26 | END 27 | -------------------------------------------------------------------------------- /scisola_tools/ISOLA/invert/lubksb.inc: -------------------------------------------------------------------------------- 1 | 2 | SUBROUTINE LUBKSB(A,N,NP,INDX,B) 3 | DIMENSION A(NP,NP),INDX(N),B(N) 4 | II=0 5 | DO 12 I=1,N 6 | LL=INDX(I) 7 | SUM=B(LL) 8 | B(LL)=B(I) 9 | IF (II.NE.0)THEN 10 | DO 11 J=II,I-1 11 | SUM=SUM-A(I,J)*B(J) 12 | 11 CONTINUE 13 | ELSE IF (SUM.NE.0.) THEN 14 | II=I 15 | ENDIF 16 | B(I)=SUM 17 | 12 CONTINUE 18 | DO 14 I=N,1,-1 19 | SUM=B(I) 20 | DO 13 J=I+1,N 21 | SUM=SUM-A(I,J)*B(J) 22 | 13 CONTINUE 23 | B(I)=SUM/A(I,I) 24 | 14 CONTINUE 25 | RETURN 26 | END 27 | 28 | -------------------------------------------------------------------------------- /scisola_dev/dsg/logo/icons/icons.qrc: -------------------------------------------------------------------------------- 1 | 2 | 3 | delete.png 4 | refresh.png 5 | revise.png 6 | browse.png 7 | edit.png 8 | left.png 9 | right.png 10 | configure.png 11 | search.png 12 | help.png 13 | play.png 14 | start.png 15 | stop.png 16 | update.png 17 | 18 | 19 | beachball.png 20 | logo5.png 21 | logo6.png 22 | 23 | 24 | -------------------------------------------------------------------------------- /scisola_tools/ISOLA15/invert/lubksb.inc: -------------------------------------------------------------------------------- 1 | 2 | SUBROUTINE LUBKSB(A,N,NP,INDX,B) 3 | DIMENSION A(NP,NP),INDX(N),B(N) 4 | II=0 5 | DO 12 I=1,N 6 | LL=INDX(I) 7 | SUM=B(LL) 8 | B(LL)=B(I) 9 | IF (II.NE.0)THEN 10 | DO 11 J=II,I-1 11 | SUM=SUM-A(I,J)*B(J) 12 | 11 CONTINUE 13 | ELSE IF (SUM.NE.0.) THEN 14 | II=I 15 | ENDIF 16 | B(I)=SUM 17 | 12 CONTINUE 18 | DO 14 I=N,1,-1 19 | SUM=B(I) 20 | DO 13 J=I+1,N 21 | SUM=SUM-A(I,J)*B(J) 22 | 13 CONTINUE 23 | B(I)=SUM/A(I,I) 24 | 14 CONTINUE 25 | RETURN 26 | END 27 | 28 | -------------------------------------------------------------------------------- /scisola_tools/crustal.dat: -------------------------------------------------------------------------------- 1 | Crustal model (free format) 2 | number of layers, not more than 15: 3 | 6 4 | Parameters of the layers 5 | depth of layer top(km) Vp(km/s) Vs(km/s) Rho(g/cm**3) Qp Qs 6 | 0.0 2.31 1.300 2.500 300 150 7 | 1.0 4.27 2.400 2.900 300 150 8 | 2.0 5.52 3.100 3.000 300 150 9 | 5.0 6.23 3.500 3.300 300 150 10 | 16.0 6.41 3.600 3.400 300 150 11 | 33.0 8.37 4.700 3.400 1000 1000 12 | **************** not more than 15 layers ! ****************************** 13 | -------------------------------------------------------------------------------- /scisola_tools/ISOLA17/invert/zbrac.inc: -------------------------------------------------------------------------------- 1 | SUBROUTINE zbrac(func,x1,x2,succes) 2 | INTEGER NTRY 3 | REAL x1,x2,func,FACTOR 4 | EXTERNAL func 5 | PARAMETER (FACTOR=1.6,NTRY=50) 6 | INTEGER j 7 | REAL f1,f2 8 | LOGICAL succes 9 | if(x1.eq.x2)call newpause('you have to guess 10 | *an initial range in zbrac') 11 | f1=func(x1) 12 | f2=func(x2) 13 | succes=.true. 14 | do 11 j=1,NTRY 15 | if(f1*f2.lt.0.)return 16 | if(abs(f1).lt.abs(f2))then 17 | x1=x1+FACTOR*(x1-x2) 18 | f1=func(x1) 19 | else 20 | x2=x2+FACTOR*(x2-x1) 21 | f2=func(x2) 22 | endif 23 | 11 continue 24 | succes=.false. 25 | return 26 | END 27 | -------------------------------------------------------------------------------- /scisola_tools/ISOLA/invert/zbrac.inc: -------------------------------------------------------------------------------- 1 | SUBROUTINE zbrac(func,x1,x2,succes) 2 | INTEGER NTRY 3 | REAL x1,x2,func,FACTOR 4 | EXTERNAL func 5 | PARAMETER (FACTOR=1.6,NTRY=50) 6 | INTEGER j 7 | REAL f1,f2 8 | LOGICAL succes 9 | if(x1.eq.x2) callnewPAUSE('you have to guess an 10 | &initial range in zbrac') 11 | f1=func(x1) 12 | f2=func(x2) 13 | succes=.true. 14 | do 11 j=1,NTRY 15 | if(f1*f2.lt.0.)return 16 | if(abs(f1).lt.abs(f2))then 17 | x1=x1+FACTOR*(x1-x2) 18 | f1=func(x1) 19 | else 20 | x2=x2+FACTOR*(x2-x1) 21 | f2=func(x2) 22 | endif 23 | 11 continue 24 | succes=.false. 25 | return 26 | END 27 | 28 | -------------------------------------------------------------------------------- /scisola_tools/ISOLA/invert/rtbis.inc: -------------------------------------------------------------------------------- 1 | FUNCTION rtbis(func,x1,x2,xacc) 2 | INTEGER JMAX 3 | REAL rtbis,x1,x2,xacc,func 4 | EXTERNAL func 5 | PARAMETER (JMAX=40) 6 | INTEGER j 7 | REAL dx,f,fmid,xmid 8 | fmid=func(x2) 9 | f=func(x1) 10 | if(f*fmid.ge.0.) callnewpause('root must be bracketed in rtbis') 11 | if(f.lt.0.)then 12 | rtbis=x1 13 | dx=x2-x1 14 | else 15 | rtbis=x2 16 | dx=x1-x2 17 | endif 18 | do 11 j=1,JMAX 19 | dx=dx*.5 20 | xmid=rtbis+dx 21 | fmid=func(xmid) 22 | if(fmid.le.0.)rtbis=xmid 23 | if(abs(dx).lt.xacc .or. fmid.eq.0.) return 24 | 11 continue 25 | call newpause('too many bisections in rtbis') 26 | END 27 | 28 | -------------------------------------------------------------------------------- /scisola_tools/ISOLA15/invert/zbrac.inc: -------------------------------------------------------------------------------- 1 | SUBROUTINE zbrac(func,x1,x2,succes) 2 | INTEGER NTRY 3 | REAL x1,x2,func,FACTOR 4 | EXTERNAL func 5 | PARAMETER (FACTOR=1.6,NTRY=50) 6 | INTEGER j 7 | REAL f1,f2 8 | LOGICAL succes 9 | if(x1.eq.x2) call newpause('you have to guess an initial 10 | &range in zbrac') 11 | f1=func(x1) 12 | f2=func(x2) 13 | succes=.true. 14 | do 11 j=1,NTRY 15 | if(f1*f2.lt.0.)return 16 | if(abs(f1).lt.abs(f2))then 17 | x1=x1+FACTOR*(x1-x2) 18 | f1=func(x1) 19 | else 20 | x2=x2+FACTOR*(x2-x1) 21 | f2=func(x2) 22 | endif 23 | 11 continue 24 | succes=.false. 25 | return 26 | END 27 | 28 | -------------------------------------------------------------------------------- /scisola_tools/ISOLA17/invert/rtbis.inc: -------------------------------------------------------------------------------- 1 | 2 | FUNCTION rtbis(func,x1,x2,xacc) 3 | INTEGER JMAX 4 | REAL rtbis,x1,x2,xacc,func 5 | EXTERNAL func 6 | PARAMETER (JMAX=40) 7 | INTEGER j 8 | REAL dx,f,fmid,xmid 9 | fmid=func(x2) 10 | f=func(x1) 11 | if(f*fmid.ge.0.) call newpause('root must be 12 | *bracketed in rtbis') 13 | if(f.lt.0.)then 14 | rtbis=x1 15 | dx=x2-x1 16 | else 17 | rtbis=x2 18 | dx=x1-x2 19 | endif 20 | do 11 j=1,JMAX 21 | dx=dx*.5 22 | xmid=rtbis+dx 23 | fmid=func(xmid) 24 | if(fmid.le.0.)rtbis=xmid 25 | if(abs(dx).lt.xacc .or. fmid.eq.0.) return 26 | 11 continue 27 | call newpause('too many bisections in rtbis') 28 | END 29 | -------------------------------------------------------------------------------- /scisola_tools/ISOLA15/invert/rtbis.inc: -------------------------------------------------------------------------------- 1 | 2 | FUNCTION rtbis(func,x1,x2,xacc) 3 | INTEGER JMAX 4 | REAL rtbis,x1,x2,xacc,func 5 | EXTERNAL func 6 | PARAMETER (JMAX=40) 7 | INTEGER j 8 | REAL dx,f,fmid,xmid 9 | fmid=func(x2) 10 | f=func(x1) 11 | if(f*fmid.ge.0.) call newpause('root must be bracketed in rtbis') 12 | if(f.lt.0.)then 13 | rtbis=x1 14 | dx=x2-x1 15 | else 16 | rtbis=x2 17 | dx=x1-x2 18 | endif 19 | do 11 j=1,JMAX 20 | dx=dx*.5 21 | xmid=rtbis+dx 22 | fmid=func(xmid) 23 | if(fmid.le.0.)rtbis=xmid 24 | if(abs(dx).lt.xacc .or. fmid.eq.0.) return 25 | 11 continue 26 | call newpause('too many bisections in rtbis') 27 | END 28 | 29 | -------------------------------------------------------------------------------- /scisola/src/__init__.py: -------------------------------------------------------------------------------- 1 | #Copyright (C) 2014 Triantafyllis Nikolaos 2 | # 3 | #This file is part of Scisola. 4 | # 5 | # Scisola is free software: you can redistribute it and/or modify 6 | # it under the terms of the GNU General Public License as published by 7 | # the Free Software Foundation, either version 2 of the License, or 8 | # (at your option) any later version. 9 | # 10 | # Scisola is distributed in the hope that it will be useful, 11 | # but WITHOUT ANY WARRANTY; without even the implied warranty of 12 | # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 13 | # GNU General Public License for more details. 14 | # 15 | # You should have received a copy of the GNU General Public License 16 | # along with Scisola. If not, see . 17 | 18 | 19 | #!/usr/bin/env python -------------------------------------------------------------------------------- /scisola/src/lib/__init__.py: -------------------------------------------------------------------------------- 1 | #Copyright (C) 2014 Triantafyllis Nikolaos 2 | # 3 | #This file is part of Scisola. 4 | # 5 | # Scisola is free software: you can redistribute it and/or modify 6 | # it under the terms of the GNU General Public License as published by 7 | # the Free Software Foundation, either version 2 of the License, or 8 | # (at your option) any later version. 9 | # 10 | # Scisola is distributed in the hope that it will be useful, 11 | # but WITHOUT ANY WARRANTY; without even the implied warranty of 12 | # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 13 | # GNU General Public License for more details. 14 | # 15 | # You should have received a copy of the GNU General Public License 16 | # along with Scisola. If not, see . 17 | 18 | 19 | #!/usr/bin/env python -------------------------------------------------------------------------------- /scisola/src/lib/gui/__init__.py: -------------------------------------------------------------------------------- 1 | #Copyright (C) 2014 Triantafyllis Nikolaos 2 | # 3 | #This file is part of Scisola. 4 | # 5 | # Scisola is free software: you can redistribute it and/or modify 6 | # it under the terms of the GNU General Public License as published by 7 | # the Free Software Foundation, either version 2 of the License, or 8 | # (at your option) any later version. 9 | # 10 | # Scisola is distributed in the hope that it will be useful, 11 | # but WITHOUT ANY WARRANTY; without even the implied warranty of 12 | # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 13 | # GNU General Public License for more details. 14 | # 15 | # You should have received a copy of the GNU General Public License 16 | # along with Scisola. If not, see . 17 | 18 | 19 | #!/usr/bin/env python -------------------------------------------------------------------------------- /scisola_tools/updatedb_daily/alter.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | # add alter.sh to daily cron job 4 | 5 | # set your own paths 6 | # update scisola db from sc3 db 7 | /usr/bin/python /home/sysop/scisola/scisola_tools/updatedb_daily/update_db.py 8 | 9 | # set your own credentials 10 | user='root' 11 | password='pass' 12 | # set the stations file 13 | # which can be generated through mysql code 14 | stationfile='/home/sysop/scisola/scisola_tools/updatedb_daily/stations.txt' 15 | 16 | while read line; do 17 | 18 | IFS=',' read -r -a array <<< "$line" 19 | network=${array[0]} 20 | code=${array[1]} 21 | priority=${array[4]} 22 | 23 | #echo "Updating $network.$code priority --> $priority" 24 | # alter priority 25 | mysql -u $user -p$password scisola -e "UPDATE Station SET priority='$priority' WHERE network='$network' and code='$code'"; 26 | 27 | 28 | -------------------------------------------------------------------------------- /scisola_dev/dsg/ui2py.sh: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | pyuic4 database.ui -o /home/nikos/Dropbox/master_thesis/version/scisola-1.0/scisola/src/lib/gui/database.py 5 | pyuic4 main.ui -o /home/nikos/Dropbox/master_thesis/version/scisola-1.0/scisola/src/lib/gui/main.py 6 | pyuic4 review.ui -o /home/nikos/Dropbox/master_thesis/version/scisola-1.0/scisola/src/lib/gui/review.py 7 | pyuic4 settings.ui -o /home/nikos/Dropbox/master_thesis/version/scisola-1.0/scisola/src/lib/gui/settings.py 8 | pyuic4 stations.ui -o /home/nikos/Dropbox/master_thesis/version/scisola-1.0/scisola/src/lib/gui/stations.py 9 | pyuic4 search.ui -o /home/nikos/Dropbox/master_thesis/version/scisola-1.0/scisola/src/lib/gui/search.py 10 | pyuic4 about.ui -o /home/nikos/Dropbox/master_thesis/version/scisola-1.0/scisola/src/lib/gui/about.py 11 | 12 | pyrcc4 logo/icons/icons.qrc -o /home/nikos/Dropbox/master_thesis/version/scisola-1.0/scisola/src/lib/gui/icons_rc.py 13 | -------------------------------------------------------------------------------- /scisola_tools/setup.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | sudo apt-get install python-pip 4 | sudo apt-get install python-dev 5 | sudo apt-get install libpng-dev 6 | sudo apt-get install libfreetype6-dev 7 | sudo apt-get install gfortran gfortran-multilib libopenblas-dev liblapack-dev 8 | sudo pip install numpy 9 | sudo pip install matplotlib 10 | sudo pip install obspy 11 | sudo apt-get install python-mysqldb 12 | sudo apt-get install python-psycopg2 13 | sudo apt-get install python-qt4 14 | 15 | wget http://sourceforge.net/projects/matplotlib/files/matplotlib-toolkits/basemap-1.0.7/basemap-1.0.7.tar.gz 16 | tar -zxvf basemap-1.0.7.tar.gz 17 | cd basemap-1.0.7 18 | 19 | wget http://download.osgeo.org/geos/geos-3.5.0.tar.bz2 20 | tar xvjf geos-3.5.0.tar.bz2 21 | cd geos-3.5.0 22 | ./configure 23 | make 24 | sudo make install 25 | 26 | cd .. 27 | sudo python setup.py install 28 | sudo pip install --upgrade six 29 | 30 | sudo pip install -U obspy 31 | 32 | 33 | -------------------------------------------------------------------------------- /scisola_tools/ISOLA/invert/subevnt.inc: -------------------------------------------------------------------------------- 1 | 2 | subroutine subevnt(aopt,w,ioptshf,sx) 3 | 4 | dimension aopt(6) 5 | dimension sx(8192,21,3) 6 | dimension w(-2500:10692,21,3,6) 7 | dimension ntm(21) 8 | logical stat(21) 9 | 10 | common /NUMBERS/ nr,ntim,nmom,isubmax,ifirst,istep,ilast, 11 | * f1,f2,f3,f4,dt 12 | common /ST/ stat,ntm 13 | 14 | c 15 | 16 | c 17 | c COMPUTING OPTIMUM SYNT SEISMO (incl. IOPTSHFT in w) 18 | c 19 | 20 | do itim=1,ntim 21 | do ir=1,nr 22 | do icom=1,3 23 | sx(itim,ir,icom)=0. 24 | enddo 25 | enddo 26 | enddo 27 | 28 | do itim=1,ntim 29 | do ir=1,nr 30 | do icom=1,3 31 | do n=1,nmom 32 | sx(itim,ir,icom)=sx(itim,ir,icom) + 33 | * aopt(n)*w(itim-ioptshf,ir,icom,n) 34 | enddo 35 | enddo 36 | enddo 37 | enddo 38 | 39 | 40 | RETURN 41 | END 42 | -------------------------------------------------------------------------------- /scisola_tools/ISOLA/invert/subevnt_12c.inc: -------------------------------------------------------------------------------- 1 | 2 | subroutine subevnt_12c(aopt,w,ioptshf,sx) 3 | 4 | dimension aopt(6) 5 | dimension sx(8192,21,3) 6 | dimension w(-2500:10692,21,3,6) 7 | dimension ntm(21) 8 | logical stat(21) 9 | 10 | common /NUMBERS/ nr,ntim,nmom,isubmax,ifirst,istep,ilast, 11 | * ff1(21),ff2(21),ff3(21),ff4(21),dt 12 | common /ST/ stat,ntm 13 | 14 | c 15 | 16 | c 17 | c COMPUTING OPTIMUM SYNT SEISMO (incl. IOPTSHFT in w) 18 | c 19 | 20 | do itim=1,ntim 21 | do ir=1,nr 22 | do icom=1,3 23 | sx(itim,ir,icom)=0. 24 | enddo 25 | enddo 26 | enddo 27 | 28 | do itim=1,ntim 29 | do ir=1,nr 30 | do icom=1,3 31 | do n=1,nmom 32 | sx(itim,ir,icom)=sx(itim,ir,icom) + 33 | * aopt(n)*w(itim-ioptshf,ir,icom,n) 34 | enddo 35 | enddo 36 | enddo 37 | enddo 38 | 39 | 40 | RETURN 41 | END 42 | -------------------------------------------------------------------------------- /scisola_tools/ISOLA17/invert/subevnt15.inc: -------------------------------------------------------------------------------- 1 | 2 | subroutine subevnt15(aopt,w,ioptshf,sx) 3 | 4 | dimension aopt(6) 5 | dimension sx(8192,21,3) 6 | dimension w(-3500:11692,21,3,6) 7 | dimension ntm(21) 8 | logical stat(21) 9 | 10 | common /NUMBERS/ nr,ntim,nmom,isubmax,ifirst,istep,ilast, 11 | * ff1(21),ff2(21),ff3(21),ff4(21),dt 12 | common /ST/ stat,ntm 13 | 14 | c 15 | 16 | c 17 | c COMPUTING OPTIMUM SYNT SEISMO (incl. IOPTSHFT in w) 18 | c 19 | 20 | do itim=1,ntim 21 | do ir=1,nr 22 | do icom=1,3 23 | sx(itim,ir,icom)=0. 24 | enddo 25 | enddo 26 | enddo 27 | 28 | do itim=1,ntim 29 | do ir=1,nr 30 | do icom=1,3 31 | do n=1,nmom 32 | sx(itim,ir,icom)=sx(itim,ir,icom) + 33 | * aopt(n)*w(itim-ioptshf,ir,icom,n) 34 | enddo 35 | enddo 36 | enddo 37 | enddo 38 | 39 | 40 | RETURN 41 | END 42 | -------------------------------------------------------------------------------- /scisola_tools/ISOLA/invert/fw.inc: -------------------------------------------------------------------------------- 1 | SUBROUTINE FW(S) 2 | COMMON/COM/FLE,FLI,FRI,FRE,DF,ILS,IRS,NT,NTM 3 | DIMENSION S(8192) 4 | COMPLEX S 5 | C 6 | FEXP=1. 7 | C 8 | PI=3.141592 9 | ILEFT=FLI/DF+1.1 10 | IRIGHT=FRI/DF+1.1 11 | IF(IRIGHT.GT.IRS)IRIGHT=IRS 12 | IF(ILEFT.LT.ILS)ILEFT=ILS 13 | IF(IRIGHT.GT.NTM)IRIGHT=NTM 14 | NLEFT=ILEFT-ILS 15 | NRIGHT=IRS-IRIGHT 16 | IF(NLEFT.GT.0)DLEFT=PI/FLOAT(NLEFT) 17 | IF(NRIGHT.GT.0)DRIGHT=PI/FLOAT(NRIGHT) 18 | C 19 | NTT=NT+2 20 | DO 1 I=1,NTM 21 | J=NTT-I 22 | FIF=I-IRIGHT 23 | FAF=I-ILS 24 | IF(I.GE.ILEFT.AND.I.LE.IRIGHT)GO TO 1 25 | IF(I.LE.ILS.OR.I.GE.IRS)S(I)=(0.0,0.0) 26 | IF(I.GT.ILS.AND.I.LT.ILEFT) 27 | 1S(I)=S(I)*(0.5*(1.-COS(DLEFT*FAF)))**FEXP 28 | IF(I.GT.IRIGHT.AND.I.LT.IRS) 29 | 1S(I)=S(I)*(0.5*(COS(DRIGHT*FIF)+1.))**FEXP 30 | IF(I.EQ.1.OR.I.EQ.NTM)GO TO 1 31 | S(J)=CONJG(S(I)) 32 | 1 CONTINUE 33 | C 34 | RETURN 35 | END 36 | -------------------------------------------------------------------------------- /scisola_tools/ISOLA15/invert/subevnt15.inc: -------------------------------------------------------------------------------- 1 | 2 | subroutine subevnt15(aopt,w,ioptshf,sx) 3 | 4 | dimension aopt(6) 5 | dimension sx(8192,21,3) 6 | dimension w(-2500:10692,21,3,6) 7 | dimension ntm(21) 8 | logical stat(21) 9 | 10 | common /NUMBERS/ nr,ntim,nmom,isubmax,ifirst,istep,ilast, 11 | * ff1(21),ff2(21),ff3(21),ff4(21),dt 12 | common /ST/ stat,ntm 13 | 14 | c 15 | 16 | c 17 | c COMPUTING OPTIMUM SYNT SEISMO (incl. IOPTSHFT in w) 18 | c 19 | 20 | do itim=1,ntim 21 | do ir=1,nr 22 | do icom=1,3 23 | sx(itim,ir,icom)=0. 24 | enddo 25 | enddo 26 | enddo 27 | 28 | do itim=1,ntim 29 | do ir=1,nr 30 | do icom=1,3 31 | do n=1,nmom 32 | sx(itim,ir,icom)=sx(itim,ir,icom) + 33 | * aopt(n)*w(itim-ioptshf,ir,icom,n) 34 | enddo 35 | enddo 36 | enddo 37 | enddo 38 | 39 | 40 | RETURN 41 | END 42 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | 2 | This repository is no longer maintained. Use the newer and more enchanced version, named Gisola, which is available at https://github.com/nikosT/Gisola/ 3 | 4 | 5 | 6 | 7 |

8 | 9 | *** 10 | 11 | The scisola software is no longer maintained. 12 | 13 | 14 | 15 | 16 | The folder contains three subfolders: 17 | 18 | scisola 19 | ======= 20 | 21 | Open-source python based software for automatic Moment Tensor calculation of events provided by SeisComP3 in real-time 22 | 23 | 24 | scisola_tools 25 | ======= 26 | 27 | Assistant utilities for scisola 28 | 29 | 30 | scisola_dev 31 | ======= 32 | Development folder of scisola 33 | 34 | ------------------------------------ 35 | Licenses 36 | ======= 37 | * scisola under GPLv2 38 | * scisola_dev under GPLv2 39 | * scisola_tools under GPLv2 except below: 40 | * scisola_tools/ISOLA folder is under ISOLA's license 41 | * scisola_tools/ISOLA15 folder is under ISOLA's license 42 | 43 | 44 | -------------------------------------------------------------------------------- /scisola_tools/ISOLA/green/param.inc: -------------------------------------------------------------------------------- 1 | c @(#) parameter.F AXITRA 4.11 12/7/93 4 2 | c********************************************************************** 3 | c* * 4 | c* PARAMETER * 5 | c* * 6 | c* nsp: nbre max source 7 | c* nrp: nbre max stat 8 | c* ncp: nbre max couche 9 | c* ikmin: nbre min d'iterations 10 | c* nkmax: (si fct de Bessel stockees) dimension tab fct Bessel 11 | c********************************************************************** 12 | 13 | implicit real*8 (a-b,d-h,o-z) 14 | implicit complex*16 (c) 15 | 16 | integer in1,in2,in3,out,out2 17 | parameter (in1=10,in2=11,in3=12,out=13,out2=14) 18 | 19 | integer nsp,nrp,ncp,nrsp,ikmin 20 | parameter (nsp=1,nrp=21,ncp=200,nrsp=nrp*nsp,ikmin=100) 21 | real*8 explim 22 | parameter (explim=-600.) 23 | 24 | integer nkmax 25 | parameter (nkmax=2000) 26 | -------------------------------------------------------------------------------- /scisola_tools/ISOLA/invert/dsretc.lst: -------------------------------------------------------------------------------- 1 | 2 | 3 | ####### 4 | ################# 5 | ##################### 6 | ######################### 7 | ############################# 8 | ############## ############## 9 | ############## P ############## 10 | -############## ############### 11 | ################################# 12 | --------------------------------- 13 | --------------------------------- 14 | --------------------------------- 15 | ------------------------------- 16 | ------------------------------- 17 | ----------- --------------- 18 | --------- T ------------- 19 | ------- ----------- 20 | ----------------- 21 | ------- 22 | 23 | -------------------------------------------------------------------------------- /scisola_tools/ISOLA15/green/param.inc: -------------------------------------------------------------------------------- 1 | c @(#) parameter.F AXITRA 4.11 12/7/93 4 2 | c********************************************************************** 3 | c* * 4 | c* PARAMETER * 5 | c* * 6 | c* nsp: nbre max source 7 | c* nrp: nbre max stat 8 | c* ncp: nbre max couche 9 | c* ikmin: nbre min d'iterations 10 | c* nkmax: (si fct de Bessel stockees) dimension tab fct Bessel 11 | c********************************************************************** 12 | 13 | implicit real*8 (a-b,d-h,o-z) 14 | implicit complex*16 (c) 15 | 16 | integer in1,in2,in3,out,out2 17 | parameter (in1=10,in2=11,in3=12,out=13,out2=14) 18 | 19 | integer nsp,nrp,ncp,nrsp,ikmin 20 | parameter (nsp=1,nrp=21,ncp=200,nrsp=nrp*nsp,ikmin=100) 21 | real*8 explim 22 | parameter (explim=-600.) 23 | 24 | integer nkmax 25 | parameter (nkmax=2000) 26 | -------------------------------------------------------------------------------- /scisola_tools/ISOLA17/green/param.inc: -------------------------------------------------------------------------------- 1 | c @(#) parameter.F AXITRA 4.11 12/7/93 4 2 | c********************************************************************** 3 | c* * 4 | c* PARAMETER * 5 | c* * 6 | c* nsp: nbre max source 7 | c* nrp: nbre max stat 8 | c* ncp: nbre max couche 9 | c* ikmin: nbre min d'iterations 10 | c* nkmax: (si fct de Bessel stockees) dimension tab fct Bessel 11 | c********************************************************************** 12 | 13 | implicit real*8 (a-b,d-h,o-z) 14 | implicit complex*16 (c) 15 | 16 | integer in1,in2,in3,out,out2 17 | parameter (in1=10,in2=11,in3=12,out=13,out2=14) 18 | 19 | integer nsp,nrp,ncp,nrsp,ikmin 20 | parameter (nsp=1,nrp=31,ncp=200,nrsp=nrp*nsp,ikmin=100) 21 | real*8 explim 22 | parameter (explim=-600.) 23 | 24 | integer nkmax 25 | parameter (nkmax=2000) 26 | -------------------------------------------------------------------------------- /scisola_tools/ISOLA/invert/subevnt_vol.inc: -------------------------------------------------------------------------------- 1 | 2 | subroutine subevnt_vol(afix6,w,ioptshf,sx) 3 | 4 | dimension aopt(6) 5 | dimension sx(8192,21,3) 6 | dimension w(-2500:10692,21,3,6) 7 | dimension ntm(21) 8 | logical stat(21) 9 | 10 | common /NUMBERS/ nr,ntim,nmom,isubmax,ifirst,istep,ilast, 11 | * f1,f2,f3,f4,dt 12 | common /ST/ stat,ntm 13 | 14 | 15 | c 16 | c COMPUTING OPTIMUM SYNT SEISMO (incl. IOPTSHFT in w) 17 | c 18 | 19 | do itim=1,ntim 20 | do ir=1,nr 21 | do icom=1,3 22 | sx(itim,ir,icom)=0. 23 | enddo 24 | enddo 25 | enddo 26 | 27 | do itim=1,ntim 28 | do ir=1,nr 29 | do icom=1,3 30 | 31 | c -------------------- calculates seismo of VOL component (even in DEVIA mode)-- 32 | 33 | 34 | sx(itim,ir,icom)= ! can run for even nmom=5 35 | * afix6*w(itim-ioptshf,ir,icom,6) ! ONLY a(6) is nonzero =afix6 36 | 37 | 38 | c --------------------------------------------- 39 | 40 | enddo 41 | enddo 42 | enddo 43 | 44 | 45 | 46 | RETURN 47 | END 48 | -------------------------------------------------------------------------------- /scisola_tools/scisola2http/httpserver.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | #Copyright (C) 2015 Triantafyllis Nikolaos 3 | # 4 | #This file is part of Scisola tools. 5 | # 6 | # Scisola is free software: you can redistribute it and/or modify 7 | # it under the terms of the GNU General Public License as published by 8 | # the Free Software Foundation, either version 2 of the License, or 9 | # (at your option) any later version. 10 | # 11 | # Scisola is distributed in the hope that it will be useful, 12 | # but WITHOUT ANY WARRANTY; without even the implied warranty of 13 | # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 14 | # GNU General Public License for more details. 15 | # 16 | # You should have received a copy of the GNU General Public License 17 | # along with Scisola. If not, see . 18 | 19 | http_port=$1 20 | 21 | init_dir=$PWD 22 | 23 | _script="$(readlink -f ${BASH_SOURCE[0]})" # full path to this script 24 | dirname=`dirname "$_script"` # folder of this script 25 | 26 | html_folder="$dirname/scisola" # full path to scisola folder (html folder) 27 | 28 | cd $html_folder 29 | python -m SimpleHTTPServer $http_port> /dev/null 2>&1 30 | cd $init_dir 31 | 32 | 33 | 34 | 35 | -------------------------------------------------------------------------------- /scisola_tools/ISOLA/invert/subevntNEW.inc: -------------------------------------------------------------------------------- 1 | 2 | subroutine subevntNEW(aopt,w,ioptshf,sx) 3 | 4 | dimension aopt(6) 5 | dimension sx(8192,21,3) 6 | dimension w(-2500:10692,21,3,6) 7 | dimension ntm(21) 8 | logical stat(21) 9 | 10 | common /NUMBERS/ nr,ntim,nmom,isubmax,ifirst,istep,ilast, 11 | * f1,f2,f3,f4,dt 12 | common /ST/ stat,ntm 13 | 14 | c 15 | 16 | c 17 | c COMPUTING OPTIMUM SYNT SEISMO (incl. IOPTSHFT in w) 18 | c 19 | 20 | do itim=1,ntim 21 | do ir=1,nr 22 | do icom=1,3 23 | sx(itim,ir,icom)=0. 24 | enddo 25 | enddo 26 | enddo 27 | c trebaze volano z DEVIA verze (nmom=5) 28 | c zname (zadane) a6 a pouzijeme ho spolu s vypoctenym a1=a5 29 | 30 | do itim=1,ntim 31 | do ir=1,nr 32 | do icom=1,3 33 | do n=1, 6 ! N E W nmom 34 | sx(itim,ir,icom)=sx(itim,ir,icom) + 35 | * aopt(n)*w(itim-ioptshf,ir,icom,n) 36 | enddo 37 | enddo 38 | enddo 39 | enddo 40 | 41 | 42 | RETURN 43 | END 44 | -------------------------------------------------------------------------------- /scisola_tools/playback.sh: -------------------------------------------------------------------------------- 1 | 2 | #!/bin/bash 3 | 4 | # a simple script/skeleton for playback mini-seeds back to seedlink service, in order to calculate MTs for past events 5 | # msrepack can be downloaded and installed from https://ds.iris.edu/ds/nodes/dmc/software/downloads/libmseed/ 6 | 7 | # create "stream.lst" 8 | # example 9 | # 2014-06-25 09:20:00;2014-06-25 09:30:00;*.*..??? 10 | 11 | # creates one multiplexed mseed file 12 | scart -dv --list stream.lst /home/sysop/seiscomp3/acquisition/archive > all.mseed 13 | 14 | # repack to 512 sectors 15 | msrepack -a -R 512 -o tmp.mseed all.mseed 16 | 17 | # sort by time (in order to run seedlink playback) 18 | scmssort -E tmp.mseed > all.mseed.sorted 19 | 20 | # seicomp3 gui (scconfig) 21 | # module -> seedlink -> enable msrtsimul 22 | # save and restart 23 | 24 | # rename in case you want to restore the buffer 25 | # or 26 | # delete /home/sysop/seiscomp3/var/lib/seedlink/buffer folder 27 | # in order to flush seedlink ringbuffer 28 | mv /home/sysop/seiscomp3/var/lib/seedlink/buffer /home/sysop/seiscomp3/var/lib/seedlink/buffer_old 29 | # or 30 | rm -rf /home/sysop/seiscomp3/var/lib/seedlink/buffer 31 | 32 | # "historic" keeps date-time of mseed file 33 | # "s" 10000 speeds up putting miniseed to seedlink ringbuffer 34 | /home/sysop/seiscomp3/bin/seiscomp exec msrtsimul -m historic -s 10000 all.mseed.sorted 35 | -------------------------------------------------------------------------------- /scisola_tools/ISOLA/invert/subcas.inc: -------------------------------------------------------------------------------- 1 | subroutine subCAS(ampl,w,sx,NTR2) 2 | 3 | c input w= seimogram pro kazdou posunutou cas.fci = sloupce matice G 4 | c ampl= momentove vahy ('amplitudy') jednotlivych posunutych seismogramu s jednotkovymi momenty 5 | c output sx= seismogram jako lin kombinacew posunutych cas fci s amplitudami ampl 6 | 7 | 8 | dimension sx(8192,21,3) 9 | dimension w(8192,21,3,24) 10 | dimension ntm(21) 11 | logical stat(21) 12 | c******************************* 13 | double precision ampl(24) ! 2x12 triangles 14 | c dimension ampl(24) 15 | c******************************* 16 | 17 | common /NUMBERS/ nr,ntim,nmom,isubmax,ifirst,istep,ilast, 18 | * f1,f2,f3,f4,dt 19 | common /ST/ stat,ntm 20 | 21 | 22 | do itim=1,ntim 23 | do ir=1,nr 24 | do icom=1,3 25 | sx(itim,ir,icom)=0. 26 | enddo 27 | enddo 28 | enddo 29 | 30 | 31 | 32 | do itim=1,ntim 33 | do ir=1,nr ! inlcuding non-used stations 34 | do icom=1,3 35 | do it=1,24 ! max 24 triangles 36 | sx(itim,ir,icom)=sx(itim,ir,icom) + 37 | * ampl(it)*w(itim,ir,icom,it) 38 | enddo 39 | enddo 40 | enddo 41 | enddo 42 | 43 | 44 | RETURN 45 | END 46 | -------------------------------------------------------------------------------- /scisola/scisola.py: -------------------------------------------------------------------------------- 1 | #Copyright (C) 2014 Triantafyllis Nikolaos 2 | # 3 | #This file is part of Scisola. 4 | # 5 | # Scisola is free software: you can redistribute it and/or modify 6 | # it under the terms of the GNU General Public License as published by 7 | # the Free Software Foundation, either version 2 of the License, or 8 | # (at your option) any later version. 9 | # 10 | # Scisola is distributed in the hope that it will be useful, 11 | # but WITHOUT ANY WARRANTY; without even the implied warranty of 12 | # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 13 | # GNU General Public License for more details. 14 | # 15 | # You should have received a copy of the GNU General Public License 16 | # along with Scisola. If not, see . 17 | 18 | 19 | #!/usr/bin/env python 20 | 21 | import sys 22 | sys.dont_write_bytecode = True 23 | from PyQt4 import QtGui 24 | 25 | import src.main 26 | 27 | 28 | if __name__ == "__main__": 29 | 30 | app = QtGui.QApplication(sys.argv) 31 | app.setApplicationName('scisola') 32 | 33 | db_scisola = None 34 | db_sc3 = None 35 | 36 | db_win = src.database.DBWindow() 37 | if db_win.exec_() == QtGui.QDialog.Accepted: 38 | db_scisola, db_sc3 = db_win.getDBvalues() 39 | 40 | main_win = src.main.MainWindow(db_scisola, db_sc3) 41 | main_win.main() 42 | sys.exit(app.exec_()) 43 | 44 | -------------------------------------------------------------------------------- /scisola_tools/ISOLA17/invert/ludcmp.inc: -------------------------------------------------------------------------------- 1 | SUBROUTINE LUDCMP(A,N,NP,INDX,D) 2 | PARAMETER (NMAX=100,TINY=1.0E-20) 3 | DIMENSION A(NP,NP),INDX(N),VV(400) 4 | D=1. 5 | DO 12 I=1,N 6 | AAMAX=0. 7 | DO 11 J=1,N 8 | IF (ABS(A(I,J)).GT.AAMAX) AAMAX=ABS(A(I,J)) 9 | 11 CONTINUE 10 | IF (AAMAX.EQ.0.) call newPAUSE('Singular matrix.') 11 | VV(I)=1./AAMAX 12 | 12 CONTINUE 13 | DO 19 J=1,N 14 | DO 14 I=1,J-1 15 | SUM=A(I,J) 16 | DO 13 K=1,I-1 17 | SUM=SUM-A(I,K)*A(K,J) 18 | 13 CONTINUE 19 | A(I,J)=SUM 20 | 14 CONTINUE 21 | AAMAX=0. 22 | DO 16 I=J,N 23 | SUM=A(I,J) 24 | DO 15 K=1,J-1 25 | SUM=SUM-A(I,K)*A(K,J) 26 | 15 CONTINUE 27 | A(I,J)=SUM 28 | DUM=VV(I)*ABS(SUM) 29 | IF (DUM.GE.AAMAX) THEN 30 | IMAX=I 31 | AAMAX=DUM 32 | ENDIF 33 | 16 CONTINUE 34 | IF (J.NE.IMAX)THEN 35 | DO 17 K=1,N 36 | DUM=A(IMAX,K) 37 | A(IMAX,K)=A(J,K) 38 | A(J,K)=DUM 39 | 17 CONTINUE 40 | D=-D 41 | VV(IMAX)=VV(J) 42 | ENDIF 43 | INDX(J)=IMAX 44 | IF(A(J,J).EQ.0.)A(J,J)=TINY 45 | IF(J.NE.N)THEN 46 | DUM=1./A(J,J) 47 | DO 18 I=J+1,N 48 | A(I,J)=A(I,J)*DUM 49 | 18 CONTINUE 50 | ENDIF 51 | 19 CONTINUE 52 | RETURN 53 | END 54 | -------------------------------------------------------------------------------- /scisola_tools/ISOLA/invert/ludcmp.inc: -------------------------------------------------------------------------------- 1 | 2 | SUBROUTINE LUDCMP(A,N,NP,INDX,D) 3 | PARAMETER (NMAX=100,TINY=1.0E-20) 4 | DIMENSION A(NP,NP),INDX(N),VV(400) 5 | D=1. 6 | DO 12 I=1,N 7 | AAMAX=0. 8 | DO 11 J=1,N 9 | IF (ABS(A(I,J)).GT.AAMAX) AAMAX=ABS(A(I,J)) 10 | 11 CONTINUE 11 | IF (AAMAX.EQ.0.) callnewPAUSE('Singular matrix.') 12 | VV(I)=1./AAMAX 13 | 12 CONTINUE 14 | DO 19 J=1,N 15 | DO 14 I=1,J-1 16 | SUM=A(I,J) 17 | DO 13 K=1,I-1 18 | SUM=SUM-A(I,K)*A(K,J) 19 | 13 CONTINUE 20 | A(I,J)=SUM 21 | 14 CONTINUE 22 | AAMAX=0. 23 | DO 16 I=J,N 24 | SUM=A(I,J) 25 | DO 15 K=1,J-1 26 | SUM=SUM-A(I,K)*A(K,J) 27 | 15 CONTINUE 28 | A(I,J)=SUM 29 | DUM=VV(I)*ABS(SUM) 30 | IF (DUM.GE.AAMAX) THEN 31 | IMAX=I 32 | AAMAX=DUM 33 | ENDIF 34 | 16 CONTINUE 35 | IF (J.NE.IMAX)THEN 36 | DO 17 K=1,N 37 | DUM=A(IMAX,K) 38 | A(IMAX,K)=A(J,K) 39 | A(J,K)=DUM 40 | 17 CONTINUE 41 | D=-D 42 | VV(IMAX)=VV(J) 43 | ENDIF 44 | INDX(J)=IMAX 45 | IF(A(J,J).EQ.0.)A(J,J)=TINY 46 | IF(J.NE.N)THEN 47 | DUM=1./A(J,J) 48 | DO 18 I=J+1,N 49 | A(I,J)=A(I,J)*DUM 50 | 18 CONTINUE 51 | ENDIF 52 | 19 CONTINUE 53 | RETURN 54 | END 55 | 56 | -------------------------------------------------------------------------------- /scisola_tools/scisola2http/readme: -------------------------------------------------------------------------------- 1 | #Copyright (C) 2015 Triantafyllis Nikolaos 2 | # 3 | #This file is part of Scisola tools. 4 | # 5 | # Scisola is free software: you can redistribute it and/or modify 6 | # it under the terms of the GNU General Public License as published by 7 | # the Free Software Foundation, either version 2 of the License, or 8 | # (at your option) any later version. 9 | # 10 | # Scisola is distributed in the hope that it will be useful, 11 | # but WITHOUT ANY WARRANTY; without even the implied warranty of 12 | # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 13 | # GNU General Public License for more details. 14 | # 15 | # You should have received a copy of the GNU General Public License 16 | # along with Scisola. If not, see . 17 | 18 | 19 | scisola2http (plugin to scisola) 20 | 21 | Features: 22 | * Real-time MT solutions monitoring 23 | * Quality value provision of the MT solution 24 | 25 | By using this script, scisola can update an html webpage with new MT solutions, in real-time. 26 | The webpage includes a google map containing marks with the solutions. A list with the latest 50 solutions, 27 | and a solution review for each MT calculation. It can also run a simple HTTP server for quick view. 28 | Quality is defined according to procedure followed in the Geodynamical Institute at the National Observatory of Athens (GINOA) for manual MT solutions (Scognamiglio et al, 2009). Development of this scisola plugin was supported by GINOA. 29 | -------------------------------------------------------------------------------- /scisola_tools/ISOLA17/green/err.txt: -------------------------------------------------------------------------------- 1 | elemse.for:321:14: 2 | 3 | if (s1 .eq. zero) go to 45 4 | 1 5 | Warning: Equality comparison for REAL(8) at (1) 6 | elemse.for:206:14: 7 | 8 | bux=real(ux(itim,ir,it)) 9 | 1 10 | Warning: Possible change of value in conversion from REAL(8) to REAL(4) at (1) [-Wconversion] 11 | elemse.for:207:14: 12 | 13 | buy=real(uy(itim,ir,it)) 14 | 1 15 | Warning: Possible change of value in conversion from REAL(8) to REAL(4) at (1) [-Wconversion] 16 | elemse.for:208:14: 17 | 18 | buz=real(uz(itim,ir,it)) 19 | 1 20 | Warning: Possible change of value in conversion from REAL(8) to REAL(4) at (1) [-Wconversion] 21 | elemse.for:218:14: 22 | 23 | bux=real(ux(itim,ir,it)) 24 | 1 25 | Warning: Possible change of value in conversion from REAL(8) to REAL(4) at (1) [-Wconversion] 26 | elemse.for:219:14: 27 | 28 | buy=real(uy(itim,ir,it)) 29 | 1 30 | Warning: Possible change of value in conversion from REAL(8) to REAL(4) at (1) [-Wconversion] 31 | elemse.for:220:14: 32 | 33 | buz=real(uz(itim,ir,it)) 34 | 1 35 | Warning: Possible change of value in conversion from REAL(8) to REAL(4) at (1) [-Wconversion] 36 | elemse.for:18:45: 37 | 38 | integer nsp,nrp,ncp,ntp,nrtp,nrtp2,icc,ics,ifr 39 | 1 40 | Warning: Unused parameter ‘nrtp2’ declared at (1) [-Wunused-parameter] 41 | -------------------------------------------------------------------------------- /scisola_tools/ISOLA15/invert/ludcmp.inc: -------------------------------------------------------------------------------- 1 | 2 | SUBROUTINE LUDCMP(A,N,NP,INDX,D) 3 | PARAMETER (NMAX=100,TINY=1.0E-20) 4 | DIMENSION A(NP,NP),INDX(N),VV(400) 5 | D=1. 6 | DO 12 I=1,N 7 | AAMAX=0. 8 | DO 11 J=1,N 9 | IF (ABS(A(I,J)).GT.AAMAX) AAMAX=ABS(A(I,J)) 10 | 11 CONTINUE 11 | IF (AAMAX.EQ.0.) call newPAUSE('Singular matrix.') 12 | VV(I)=1./AAMAX 13 | 12 CONTINUE 14 | DO 19 J=1,N 15 | DO 14 I=1,J-1 16 | SUM=A(I,J) 17 | DO 13 K=1,I-1 18 | SUM=SUM-A(I,K)*A(K,J) 19 | 13 CONTINUE 20 | A(I,J)=SUM 21 | 14 CONTINUE 22 | AAMAX=0. 23 | DO 16 I=J,N 24 | SUM=A(I,J) 25 | DO 15 K=1,J-1 26 | SUM=SUM-A(I,K)*A(K,J) 27 | 15 CONTINUE 28 | A(I,J)=SUM 29 | DUM=VV(I)*ABS(SUM) 30 | IF (DUM.GE.AAMAX) THEN 31 | IMAX=I 32 | AAMAX=DUM 33 | ENDIF 34 | 16 CONTINUE 35 | IF (J.NE.IMAX)THEN 36 | DO 17 K=1,N 37 | DUM=A(IMAX,K) 38 | A(IMAX,K)=A(J,K) 39 | A(J,K)=DUM 40 | 17 CONTINUE 41 | D=-D 42 | VV(IMAX)=VV(J) 43 | ENDIF 44 | INDX(J)=IMAX 45 | IF(A(J,J).EQ.0.)A(J,J)=TINY 46 | IF(J.NE.N)THEN 47 | DUM=1./A(J,J) 48 | DO 18 I=J+1,N 49 | A(I,J)=A(I,J)*DUM 50 | 18 CONTINUE 51 | ENDIF 52 | 19 CONTINUE 53 | RETURN 54 | END 55 | -------------------------------------------------------------------------------- /scisola_tools/ISOLA/green/dimen1.inc: -------------------------------------------------------------------------------- 1 | c @(#) dimension1.F AXITRA 4.12 12/7/93 4 2 | c***************************************************************************** 3 | c* * 4 | c* DIMENSION1 * 5 | c* * 6 | c* Declaration de variables generales : * 7 | c* constantes, parametres du modele * 8 | c* * 9 | c***************************************************************************** 10 | 11 | 12 | integer ncr,irc,nzr,nzrr,izrr,nr,nc,ns,nrs, 13 | 1 ncs,isc,nzs,nzss,izss,irs 14 | 15 | complex*16 ai,omega,omega2,a1 16 | real*8 cosr,sinr,pi,pi2,hc,kr,kr2,rr,uconv, 17 | 1 xlnf,xs,ys,zs,xr,yr,zr,vp,vs,vp2,vs2, 18 | 2 rho,qp,qs 19 | 20 | logical ttconv 21 | 22 | common /dim1a/ ai,pi,pi2,omega,omega2,a1,kr,kr2,uconv,xlnf, 23 | & ttconv 24 | common /dim1b/ xr(nrp),yr(nrp),zr(nrp),cosr(nrp,nsp),sinr(nrp,nsp) 25 | common /dim1c/ xs(nsp),ys(nsp),zs(nsp) 26 | common /dim1d/ rr(nrsp),nc,nr,ns,irs(nrp,nsp),nrs 27 | common /dim1e/ hc(ncp),vp(ncp),vs(ncp),vp2(ncp),vs2(ncp), 28 | & rho(ncp),qp(ncp),qs(ncp) 29 | common /dim1f/ ncr,irc(ncp),nzr(ncp),nzrr(nrp,ncp), 30 | & izrr(nrp,nrp,ncp) 31 | common /dim1g/ ncs,isc(ncp),nzs(ncp),nzss(nsp,ncp), 32 | & izss(nsp,nsp,ncp) 33 | -------------------------------------------------------------------------------- /scisola_tools/ISOLA15/green/dimen1.inc: -------------------------------------------------------------------------------- 1 | c @(#) dimension1.F AXITRA 4.12 12/7/93 4 2 | c***************************************************************************** 3 | c* * 4 | c* DIMENSION1 * 5 | c* * 6 | c* Declaration de variables generales : * 7 | c* constantes, parametres du modele * 8 | c* * 9 | c***************************************************************************** 10 | 11 | 12 | integer ncr,irc,nzr,nzrr,izrr,nr,nc,ns,nrs, 13 | 1 ncs,isc,nzs,nzss,izss,irs 14 | 15 | complex*16 ai,omega,omega2,a1 16 | real*8 cosr,sinr,pi,pi2,hc,kr,kr2,rr,uconv, 17 | 1 xlnf,xs,ys,zs,xr,yr,zr,vp,vs,vp2,vs2, 18 | 2 rho,qp,qs 19 | 20 | logical ttconv 21 | 22 | common /dim1a/ ai,pi,pi2,omega,omega2,a1,kr,kr2,uconv,xlnf, 23 | & ttconv 24 | common /dim1b/ xr(nrp),yr(nrp),zr(nrp),cosr(nrp,nsp),sinr(nrp,nsp) 25 | common /dim1c/ xs(nsp),ys(nsp),zs(nsp) 26 | common /dim1d/ rr(nrsp),nc,nr,ns,irs(nrp,nsp),nrs 27 | common /dim1e/ hc(ncp),vp(ncp),vs(ncp),vp2(ncp),vs2(ncp), 28 | & rho(ncp),qp(ncp),qs(ncp) 29 | common /dim1f/ ncr,irc(ncp),nzr(ncp),nzrr(nrp,ncp), 30 | & izrr(nrp,nrp,ncp) 31 | common /dim1g/ ncs,isc(ncp),nzs(ncp),nzss(nsp,ncp), 32 | & izss(nsp,nsp,ncp) 33 | -------------------------------------------------------------------------------- /scisola/src/about.py: -------------------------------------------------------------------------------- 1 | ##Copyright (C) 2014 Triantafyllis Nikolaos 2 | # 3 | #This file is part of Scisola. 4 | # 5 | # Scisola is free software: you can redistribute it and/or modify 6 | # it under the terms of the GNU General Public License as published by 7 | # the Free Software Foundation, either version 2 of the License, or 8 | # (at your option) any later version. 9 | # 10 | # Scisola is distributed in the hope that it will be useful, 11 | # but WITHOUT ANY WARRANTY; without even the implied warranty of 12 | # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 13 | # GNU General Public License for more details. 14 | # 15 | # You should have received a copy of the GNU General Public License 16 | # along with Scisola. If not, see . 17 | 18 | 19 | #!/usr/bin/env python 20 | 21 | import sys 22 | sys.dont_write_bytecode = True 23 | 24 | from PyQt4 import QtGui 25 | 26 | # scisola's import 27 | import lib.gui.about 28 | 29 | class AboutWindow(QtGui.QDialog, lib.gui.about.Ui_Dialog): 30 | def __init__(self, parent=None): 31 | super(AboutWindow, self).__init__(parent) 32 | # inherited from Ui_Dialog 33 | self.setupUi(self) 34 | self.parent = parent 35 | try: 36 | self.main() 37 | except: 38 | self.parent.master_log.info("Error in about.py\n" + \ 39 | str(sys.exc_info())) 40 | 41 | 42 | def main(self): 43 | # center window 44 | frame = self.frameGeometry() 45 | frame.moveCenter(QtGui.QDesktopWidget().availableGeometry().center()) 46 | self.move(frame.topLeft()) 47 | 48 | -------------------------------------------------------------------------------- /scisola_tools/ISOLA17/green/dimen1.inc: -------------------------------------------------------------------------------- 1 | c @(#) dimension1.F AXITRA 4.12 12/7/93 4 2 | c***************************************************************************** 3 | c* * 4 | c* DIMENSION1 * 5 | c* * 6 | c* Declaration de variables generales : * 7 | c* constantes, parametres du modele * 8 | c* * 9 | c***************************************************************************** 10 | 11 | 12 | integer ncr,irc,nzr,nzrr,izrr,nr,nc,ns,nrs, 13 | 1 ncs,isc,nzs,nzss,izss,irs 14 | 15 | complex*16 ai,omega,omega2,a1 16 | real*8 cosr,sinr,pi,pi2,hc,kr,kr2,rr,uconv, 17 | 1 xlnf,xs,ys,zs,xr,yr,zr,vp,vs,vp2,vs2, 18 | 2 rho,qp,qs 19 | 20 | logical ttconv 21 | 22 | common /dim1a/ ai,pi,pi2,omega,omega2,a1,kr,kr2,uconv,xlnf, 23 | & ttconv 24 | common /dim1b/ xr(nrp),yr(nrp),zr(nrp),cosr(nrp,nsp),sinr(nrp,nsp) 25 | common /dim1c/ xs(nsp),ys(nsp),zs(nsp) 26 | common /dim1d/ rr(nrsp),nc,nr,ns,irs(nrp,nsp),nrs 27 | common /dim1e/ hc(ncp),vp(ncp),vs(ncp),vp2(ncp),vs2(ncp), 28 | & rho(ncp),qp(ncp),qs(ncp) 29 | common /dim1f/ ncr,irc(ncp),nzr(ncp),nzrr(nrp,ncp), 30 | & izrr(nrp,nrp,ncp) 31 | common /dim1g/ ncs,isc(ncp),nzs(ncp),nzss(nsp,ncp), 32 | & izss(nsp,nsp,ncp) 33 | -------------------------------------------------------------------------------- /scisola_tools/updatedb_daily/update_db.py: -------------------------------------------------------------------------------- 1 | ##Copyright (C) 2017 Triantafyllis Nikolaos 2 | # 3 | #This file is part of Scisola. 4 | # 5 | # Scisola is free software: you can redistribute it and/or modify 6 | # it under the terms of the GNU General Public License as published by 7 | # the Free Software Foundation, either version 2 of the License, or 8 | # (at your option) any later version. 9 | # 10 | # Scisola is distributed in the hope that it will be useful, 11 | # but WITHOUT ANY WARRANTY; without even the implied warranty of 12 | # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 13 | # GNU General Public License for more details. 14 | # 15 | # You should have received a copy of the GNU General Public License 16 | # along with Scisola. If not, see . 17 | 18 | # This script imports the stations and streams from SeisComP3 directly to scisola. 19 | # It can be run as a daily routine in cron: 20 | # * # update inventory every day 21 | # * @daily /usr/bin/python /home/user/update_db.py 22 | 23 | #!/usr/bin/env python 24 | 25 | import imp 26 | import sys 27 | sys.dont_write_bytecode = True 28 | import MySQLdb as mysql 29 | import psycopg2 as psql 30 | import datetime as date 31 | 32 | # fix your scisola path here 33 | sys.path.append('/home/user/scisola-master/scisola/src/lib') 34 | import database 35 | import stream 36 | 37 | db = database.Database() 38 | db.user="user" 39 | db.password="password" 40 | db.database="scisola" 41 | db.host="host" 42 | 43 | db_sc3=database.Database() 44 | db_sc3.host="host" # local or remote host 45 | db_sc3.database="seiscomp3" 46 | db_sc3.user="sysop" 47 | db_sc3.password="sysop" 48 | 49 | db.importFromSc3(db_sc3, reset=True) 50 | 51 | -------------------------------------------------------------------------------- /scisola_tools/ISOLA/green/fcoolr.inc: -------------------------------------------------------------------------------- 1 | C SUBROUTINE FCOOLR(K,D,SN) 2 | C FAST FOURIER TRANSFORM OF N = 2**K COMPLEX DATA POINTS 3 | C REPARTS HELD IN D(1,3,...2N-1), IMPARTS IN D(2,4,...2N). 4 | C------------------------------------------------------------------ 5 | C 6 | SUBROUTINE FCOOLR(K,D,SN) 7 | DIMENSION INU(20),D(16384) 8 | LX=2**K 9 | Q1=LX 10 | IL=LX 11 | SH=SN*6.28318530718/Q1 12 | DO 10 I=1,K 13 | IL=IL/2 14 | 10 INU(I)=IL 15 | NKK=1 16 | DO 40 LA=1,K 17 | NCK=NKK 18 | NKK=NKK+NKK 19 | LCK=LX/NCK 20 | L2K=LCK+LCK 21 | NW=0 22 | DO 40 ICK=1,NCK 23 | FNW=NW 24 | AA=SH*FNW 25 | W1=COS(AA) 26 | W2=SIN(AA) 27 | LS=L2K*(ICK-1) 28 | DO 20 I=2,LCK,2 29 | J1=I+LS 30 | J=J1-1 31 | JH=J+LCK 32 | JH1=JH+1 33 | Q1=D(JH)*W1-D(JH1)*W2 34 | Q2=D(JH)*W2+D(JH1)*W1 35 | D(JH)=D(J)-Q1 36 | D(JH1)=D(J1)-Q2 37 | D(J)=D(J)+Q1 38 | 20 D(J1)=D(J1)+Q2 39 | DO 29 I=2,K 40 | ID=INU(I) 41 | IL=ID+ID 42 | IF(NW-ID-IL*(NW/IL)) 40,30,30 43 | 30 NW=NW-ID 44 | 29 CONTINUE 45 | 40 NW=NW+ID 46 | NW=0 47 | DO 6 J=1,LX 48 | IF(NW-J) 8,7,7 49 | 7 JJ=NW+NW+1 50 | J1=JJ+1 51 | JH1=J+J 52 | JH=JH1-1 53 | Q1=D(JJ) 54 | D(JJ)=D(JH) 55 | D(JH)=Q1 56 | Q1=D(J1) 57 | D(J1)=D(JH1) 58 | D(JH1)=Q1 59 | 8 DO 9 I=1,K 60 | ID=INU(I) 61 | IL=ID+ID 62 | IF(NW-ID-IL*(NW/IL)) 6,5,5 63 | 5 NW=NW-ID 64 | 9 CONTINUE 65 | 6 NW=NW+ID 66 | RETURN 67 | END 68 | -------------------------------------------------------------------------------- /scisola_tools/ISOLA/invert/fcoolr.inc: -------------------------------------------------------------------------------- 1 | C SUBROUTINE FCOOLR(K,D,SN) 2 | C FAST FOURIER TRANSFORM OF N = 2**K COMPLEX DATA POINTS 3 | C REPARTS HELD IN D(1,3,...2N-1), IMPARTS IN D(2,4,...2N). 4 | C------------------------------------------------------------------ 5 | C 6 | SUBROUTINE FCOOLR(K,D,SN) 7 | DIMENSION INU(20),D(16384) 8 | LX=2**K 9 | Q1=LX 10 | IL=LX 11 | SH=SN*6.28318530718/Q1 12 | DO 10 I=1,K 13 | IL=IL/2 14 | 10 INU(I)=IL 15 | NKK=1 16 | DO 40 LA=1,K 17 | NCK=NKK 18 | NKK=NKK+NKK 19 | LCK=LX/NCK 20 | L2K=LCK+LCK 21 | NW=0 22 | DO 40 ICK=1,NCK 23 | FNW=NW 24 | AA=SH*FNW 25 | W1=COS(AA) 26 | W2=SIN(AA) 27 | LS=L2K*(ICK-1) 28 | DO 20 I=2,LCK,2 29 | J1=I+LS 30 | J=J1-1 31 | JH=J+LCK 32 | JH1=JH+1 33 | Q1=D(JH)*W1-D(JH1)*W2 34 | Q2=D(JH)*W2+D(JH1)*W1 35 | D(JH)=D(J)-Q1 36 | D(JH1)=D(J1)-Q2 37 | D(J)=D(J)+Q1 38 | 20 D(J1)=D(J1)+Q2 39 | DO 29 I=2,K 40 | ID=INU(I) 41 | IL=ID+ID 42 | IF(NW-ID-IL*(NW/IL)) 40,30,30 43 | 30 NW=NW-ID 44 | 29 CONTINUE 45 | 40 NW=NW+ID 46 | NW=0 47 | DO 6 J=1,LX 48 | IF(NW-J) 8,7,7 49 | 7 JJ=NW+NW+1 50 | J1=JJ+1 51 | JH1=J+J 52 | JH=JH1-1 53 | Q1=D(JJ) 54 | D(JJ)=D(JH) 55 | D(JH)=Q1 56 | Q1=D(J1) 57 | D(J1)=D(JH1) 58 | D(JH1)=Q1 59 | 8 DO 9 I=1,K 60 | ID=INU(I) 61 | IL=ID+ID 62 | IF(NW-ID-IL*(NW/IL)) 6,5,5 63 | 5 NW=NW-ID 64 | 9 CONTINUE 65 | 6 NW=NW+ID 66 | RETURN 67 | END 68 | -------------------------------------------------------------------------------- /scisola_tools/ISOLA15/green/fcoolr.inc: -------------------------------------------------------------------------------- 1 | C SUBROUTINE FCOOLR(K,D,SN) 2 | C FAST FOURIER TRANSFORM OF N = 2**K COMPLEX DATA POINTS 3 | C REPARTS HELD IN D(1,3,...2N-1), IMPARTS IN D(2,4,...2N). 4 | C------------------------------------------------------------------ 5 | C 6 | SUBROUTINE FCOOLR(K,D,SN) 7 | DIMENSION INU(20),D(16384) 8 | LX=2**K 9 | Q1=LX 10 | IL=LX 11 | SH=SN*6.28318530718/Q1 12 | DO 10 I=1,K 13 | IL=IL/2 14 | 10 INU(I)=IL 15 | NKK=1 16 | DO 40 LA=1,K 17 | NCK=NKK 18 | NKK=NKK+NKK 19 | LCK=LX/NCK 20 | L2K=LCK+LCK 21 | NW=0 22 | DO 40 ICK=1,NCK 23 | FNW=NW 24 | AA=SH*FNW 25 | W1=COS(AA) 26 | W2=SIN(AA) 27 | LS=L2K*(ICK-1) 28 | DO 20 I=2,LCK,2 29 | J1=I+LS 30 | J=J1-1 31 | JH=J+LCK 32 | JH1=JH+1 33 | Q1=D(JH)*W1-D(JH1)*W2 34 | Q2=D(JH)*W2+D(JH1)*W1 35 | D(JH)=D(J)-Q1 36 | D(JH1)=D(J1)-Q2 37 | D(J)=D(J)+Q1 38 | 20 D(J1)=D(J1)+Q2 39 | DO 29 I=2,K 40 | ID=INU(I) 41 | IL=ID+ID 42 | IF(NW-ID-IL*(NW/IL)) 40,30,30 43 | 30 NW=NW-ID 44 | 29 CONTINUE 45 | 40 NW=NW+ID 46 | NW=0 47 | DO 6 J=1,LX 48 | IF(NW-J) 8,7,7 49 | 7 JJ=NW+NW+1 50 | J1=JJ+1 51 | JH1=J+J 52 | JH=JH1-1 53 | Q1=D(JJ) 54 | D(JJ)=D(JH) 55 | D(JH)=Q1 56 | Q1=D(J1) 57 | D(J1)=D(JH1) 58 | D(JH1)=Q1 59 | 8 DO 9 I=1,K 60 | ID=INU(I) 61 | IL=ID+ID 62 | IF(NW-ID-IL*(NW/IL)) 6,5,5 63 | 5 NW=NW-ID 64 | 9 CONTINUE 65 | 6 NW=NW+ID 66 | RETURN 67 | END 68 | -------------------------------------------------------------------------------- /scisola_tools/ISOLA/invert/eleonly.inc: -------------------------------------------------------------------------------- 1 | 2 | subroutine eleonly(filename,w) 3 | 4 | c only reading elem seis for a given source position 5 | 6 | character*12 filename 7 | dimension w(-2500:10692,21,3,6) 8 | dimension r(6,6),rinv(6,6),rold(6,6) 9 | dimension indx(6),y(6,6) 10 | dimension ntm(21) ! new 11 | dimension weig(21,3) ! new 12 | logical stat(21) 13 | 14 | 15 | common /NUMBERS/ nr,ntim,nmom,isubmax,ifirst,istep,ilast, 16 | * f1,f2,f3,f4,dt 17 | common /ST/ stat,ntm ! new 18 | common /WEI/ weig 19 | 20 | 21 | open(100,form='unformatted',file=filename) ! elementary seismograms from ELEMSE (input) 22 | 23 | 24 | 25 | c ******************************************************************* 26 | c *********** MANIPULATING ELEMENTARY SEISMOGRAMS (Green's) ********* 27 | c ******************************************************************* 28 | 29 | c 30 | c READING 6 ELEMENTARY velocity SEISMOGRAMS, a single point source 31 | c (synth. Green's convolved with SOME time fctn.; see ELEMSE.FOR) 32 | c 33 | c 34 | 35 | do ir=1,nr 36 | do it=1,6 ! here MUST be 6 (not nmom!) since 6 are calculated !!!! 37 | do itim=1,ntim ! pres cas 38 | read(100) time, 39 | * w(itim,ir,1,it),w(itim,ir,2,it),w(itim,ir,3,it) 40 | enddo 41 | enddo 42 | enddo 43 | 44 | REWIND(100) 45 | 46 | c 47 | c FILTERING THE ELEM. SEISMO 48 | c 49 | 50 | do ir=1,nr 51 | do icom=1,3 52 | do it=1,6 ! here MUST be 6, not nmom 53 | call filter(f1,f2,f3,f4,dt, w(1,ir,icom,it) ) 54 | enddo 55 | enddo 56 | enddo 57 | 58 | 59 | RETURN 60 | END 61 | -------------------------------------------------------------------------------- /scisola_tools/ISOLA/green/dimen2.inc: -------------------------------------------------------------------------------- 1 | c @(#) dimension2.F AXITRA 4.12 12/7/93 4 2 | c***************************************************************************** 3 | c* * 4 | c* DIMENSION2 * 5 | c* * 6 | c* Declaration de variables utilisees dans le calcul par boucle en kr * 7 | c* externe (routines reflect0 a reflect6) * 8 | c* * 9 | c***************************************************************************** 10 | 11 | 12 | real*8 fj1,k0,k1,k2,k3,k4,k5 13 | complex*16 me1,me2,nt,mt,ntsh,mtsh,fdo, 14 | 1 fup,fdosh,fupsh,su1,sd1,su2,sd2,su3,sd3,su4,sd4, 15 | 2 su1sh,sd1sh,su2sh,sd2sh,u,ru,rd,tu,td,rdsh,rush, 16 | 3 tush,tdsh 17 | 18 | common /dim2a/ cka(ncp),ckb(ncp),cka2(ncp),ckb2(ncp), 19 | & cnu(ncp),cgam(ncp),c2(ncp),cff(nsp) 20 | common /dim2b/ fj1(nrsp),k0(nrsp),k1(nrsp),k2(nrsp), 21 | & k3(nrsp),k4(nrsp),k5(nrsp) 22 | common /dim2c/ rd(ncp,2,2),ru(ncp,2,2),td(ncp,2,2), 23 | & tu(ncp,2,2),rdsh(ncp),rush(ncp), 24 | & tdsh(ncp),tush(ncp),me1(ncp),me2(ncp) 25 | common /dim2d/ nt(ncp,2,2),mt(ncp,2,2),ntsh(ncp),mtsh(ncp) 26 | common /dim2e/ fdo(ncp,2,2),fup(ncp,2,2),fupsh(ncp),fdosh(ncp) 27 | common /dim2f/ su1(nsp,2),sd1(nsp,2),su2(nsp,2),sd2(nsp,2), 28 | & su3(nsp,2),sd3(nsp,2),su4(nsp,2),sd4(nsp,2), 29 | & su1sh(nsp),sd1sh(nsp),su2sh(nsp),sd2sh(nsp) 30 | common /dim2g/ u(nrp,nsp,11) 31 | -------------------------------------------------------------------------------- /scisola_tools/ISOLA15/green/dimen2.inc: -------------------------------------------------------------------------------- 1 | c @(#) dimension2.F AXITRA 4.12 12/7/93 4 2 | c***************************************************************************** 3 | c* * 4 | c* DIMENSION2 * 5 | c* * 6 | c* Declaration de variables utilisees dans le calcul par boucle en kr * 7 | c* externe (routines reflect0 a reflect6) * 8 | c* * 9 | c***************************************************************************** 10 | 11 | 12 | real*8 fj1,k0,k1,k2,k3,k4,k5 13 | complex*16 me1,me2,nt,mt,ntsh,mtsh,fdo, 14 | 1 fup,fdosh,fupsh,su1,sd1,su2,sd2,su3,sd3,su4,sd4, 15 | 2 su1sh,sd1sh,su2sh,sd2sh,u,ru,rd,tu,td,rdsh,rush, 16 | 3 tush,tdsh 17 | 18 | common /dim2a/ cka(ncp),ckb(ncp),cka2(ncp),ckb2(ncp), 19 | & cnu(ncp),cgam(ncp),c2(ncp),cff(nsp) 20 | common /dim2b/ fj1(nrsp),k0(nrsp),k1(nrsp),k2(nrsp), 21 | & k3(nrsp),k4(nrsp),k5(nrsp) 22 | common /dim2c/ rd(ncp,2,2),ru(ncp,2,2),td(ncp,2,2), 23 | & tu(ncp,2,2),rdsh(ncp),rush(ncp), 24 | & tdsh(ncp),tush(ncp),me1(ncp),me2(ncp) 25 | common /dim2d/ nt(ncp,2,2),mt(ncp,2,2),ntsh(ncp),mtsh(ncp) 26 | common /dim2e/ fdo(ncp,2,2),fup(ncp,2,2),fupsh(ncp),fdosh(ncp) 27 | common /dim2f/ su1(nsp,2),sd1(nsp,2),su2(nsp,2),sd2(nsp,2), 28 | & su3(nsp,2),sd3(nsp,2),su4(nsp,2),sd4(nsp,2), 29 | & su1sh(nsp),sd1sh(nsp),su2sh(nsp),sd2sh(nsp) 30 | common /dim2g/ u(nrp,nsp,11) 31 | -------------------------------------------------------------------------------- /scisola_tools/ISOLA17/green/dimen2.inc: -------------------------------------------------------------------------------- 1 | c @(#) dimension2.F AXITRA 4.12 12/7/93 4 2 | c***************************************************************************** 3 | c* * 4 | c* DIMENSION2 * 5 | c* * 6 | c* Declaration de variables utilisees dans le calcul par boucle en kr * 7 | c* externe (routines reflect0 a reflect6) * 8 | c* * 9 | c***************************************************************************** 10 | 11 | 12 | real*8 fj1,k0,k1,k2,k3,k4,k5 13 | complex*16 me1,me2,nt,mt,ntsh,mtsh,fdo, 14 | 1 fup,fdosh,fupsh,su1,sd1,su2,sd2,su3,sd3,su4,sd4, 15 | 2 su1sh,sd1sh,su2sh,sd2sh,u,ru,rd,tu,td,rdsh,rush, 16 | 3 tush,tdsh 17 | 18 | common /dim2a/ cka(ncp),ckb(ncp),cka2(ncp),ckb2(ncp), 19 | & cnu(ncp),cgam(ncp),c2(ncp),cff(nsp) 20 | common /dim2b/ fj1(nrsp),k0(nrsp),k1(nrsp),k2(nrsp), 21 | & k3(nrsp),k4(nrsp),k5(nrsp) 22 | common /dim2c/ rd(ncp,2,2),ru(ncp,2,2),td(ncp,2,2), 23 | & tu(ncp,2,2),rdsh(ncp),rush(ncp), 24 | & tdsh(ncp),tush(ncp),me1(ncp),me2(ncp) 25 | common /dim2d/ nt(ncp,2,2),mt(ncp,2,2),ntsh(ncp),mtsh(ncp) 26 | common /dim2e/ fdo(ncp,2,2),fup(ncp,2,2),fupsh(ncp),fdosh(ncp) 27 | common /dim2f/ su1(nsp,2),sd1(nsp,2),su2(nsp,2),sd2(nsp,2), 28 | & su3(nsp,2),sd3(nsp,2),su4(nsp,2),sd4(nsp,2), 29 | & su1sh(nsp),sd1sh(nsp),su2sh(nsp),sd2sh(nsp) 30 | common /dim2g/ u(nrp,nsp,11) 31 | -------------------------------------------------------------------------------- /scisola_tools/ISOLA/invert/eleonly_12c.inc: -------------------------------------------------------------------------------- 1 | 2 | subroutine eleonly_12c(filename,w) 3 | 4 | c only reading elem seis for a given source position 5 | 6 | character*12 filename 7 | dimension w(-2500:10692,21,3,6) 8 | dimension r(6,6),rinv(6,6),rold(6,6) 9 | dimension indx(6),y(6,6) 10 | dimension ntm(21) ! new 11 | dimension weig(21,3) ! new 12 | logical stat(21) 13 | 14 | 15 | common /NUMBERS/ nr,ntim,nmom,isubmax,ifirst,istep,ilast, 16 | * ff1(21),ff2(21),ff3(21),ff4(21),dt 17 | common /ST/ stat,ntm ! new 18 | common /WEI/ weig 19 | 20 | 21 | open(100,form='unformatted',file=filename) ! elementary seismograms from ELEMSE (input) 22 | 23 | 24 | 25 | c ******************************************************************* 26 | c *********** MANIPULATING ELEMENTARY SEISMOGRAMS (Greens) ********* 27 | c ******************************************************************* 28 | 29 | c 30 | c READING 6 ELEMENTARY velocity SEISMOGRAMS, a single point source 31 | c (synth. Greens convolved with SOME time fctn.; see ELEMSE.FOR) 32 | c 33 | c 34 | 35 | do ir=1,nr 36 | do it=1,6 ! here MUST be 6 (not nmom!) since 6 are calculated !!!! 37 | do itim=1,ntim ! pres cas 38 | read(100) time, 39 | * w(itim,ir,1,it),w(itim,ir,2,it),w(itim,ir,3,it) 40 | enddo 41 | enddo 42 | enddo 43 | 44 | REWIND(100) 45 | 46 | c 47 | c FILTERING THE ELEM. SEISMO 48 | c 49 | 50 | do ir=1,nr 51 | f1=ff1(ir) 52 | f2=ff2(ir) 53 | f3=ff3(ir) 54 | f4=ff4(ir) 55 | do icom=1,3 56 | do it=1,6 ! here MUST be 6, not nmom 57 | call filter(f1,f2,f3,f4,dt, w(1,ir,icom,it) ) 58 | enddo 59 | enddo 60 | enddo 61 | 62 | 63 | RETURN 64 | END 65 | -------------------------------------------------------------------------------- /scisola_tools/ISOLA15/invert/ISOLA_2015_readme: -------------------------------------------------------------------------------- 1 | This is a new release of ISOLA. 2 | =============================== 3 | (Fortran codes by J. Zahradnik, Matlab GUI codes by E. Sokos) 4 | 5 | New users should study instructions (examples) of the previous version: 6 | http://geo.mff.cuni.cz/~jz/isola_brasilia/ 7 | However, new codes of this release would give slightly different results. 8 | 9 | Major changes compared to the 'Brasilia version" include 10 | 11 | 1) All codes use causal filtration (both Fortran and Matlab). 12 | 2) All codes use allstat with station-dependent frequency range. 13 | 3) Only 2 fiter values are used f1 and f4. Please prescribe f2=f1, f3=f4 if code still asks for 4 values. 14 | 4) Formal shifts of seismograms (50 seconds) are no more used. Seismograms start at t=0, equivalent to origin time. 15 | 5) Take-off angles are calculated as in standard location codes (all first arriving head waves are considered). 16 | 6) CSPS method is included in GUI = combination of polarities and waveforms 17 | 7) New output plot added to CSPS (Variance reduction vs. trial source number nad Mw) 18 | 8) Pearson's correlation coefficient added as output in the uncertainty calculation 19 | 9) Bugs were detected in and removed from the time-function calculation codes (time_fixed and timfuncas) 20 | 10) Uncertainty mapping inlcuded in GUI 21 | 22 | HOW TO RUN: 23 | Unzip the two folders of this distribution, copy them on C disk of your computer and and put these new folders on your Windows system path INSTEAD of the analogous previous folders with the fortran and GUI codes. 24 | 25 | COMPILATION: 26 | If you need to edit ANY of the *.for code, compile it after edit, and then ALWAYS run COPYNEWNAMES.BAT. It is because GUI will still use the 'old' code names. 27 | 28 | Recommendations: 29 | a) Keep old codes; this new version is still under development. 30 | b) It is always good if records have their start time 60-120 seconds before origin time. 31 | 32 | 33 | Jiri Zahradnik and Efthimios Sokos 34 | Praha July 2015 35 | 36 | -------------------------------------------------------------------------------- /scisola_tools/ISOLA/invert/angles.inc: -------------------------------------------------------------------------------- 1 | SUBROUTINE ANGLES (ANN1,ANN2,DIP,STRIKE,RAKE) 2 | C 3 | C procedure ANGLES determines dip, strike and rake angles from 4 | C nodal plane normals; 5 | C to obtain both the solutions it has to be called twice: 6 | C CALL ANGLES (AN1,AN2,D1,S1,R1) 7 | C CALL ANGLES (AN2,AN1,D2,S2,R2) 8 | C 9 | DIMENSION ANN1(3),AN1(3),ANN2(3),AN2(3) 10 | C 11 | EPS=0.001 12 | FAC=180./3.1415927 13 | IF (ANN1(3).GT.0.) THEN 14 | DO 300 J=1,3 15 | AN2(J)=-ANN2(J) 16 | 300 AN1(J)=-ANN1(J) 17 | ELSE 18 | DO 310 J=1,3 19 | AN2(J)=ANN2(J) 20 | 310 AN1(J)=ANN1(J) 21 | ENDIF 22 | if (an1(3).lt.-0.99) then !!!!!!!!!!!!!!!! 23 | DIP=ACOS(0.999) 24 | else 25 | DIP=ACOS(-AN1(3)) 26 | endif !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! 27 | IF (ABS(ABS(AN1(3))-1.).LT.EPS) THEN 28 | RAKE=0. 29 | STRIKE=ATAN2(AN2(2),AN2(1)) 30 | IF (STRIKE.LT.0.) STRIKE=STRIKE+6.2831853 31 | ELSE 32 | SDI=1./SQRT(1.-AN1(3)*AN1(3)) 33 | STRIKE=ATAN2(-AN1(1)*SDI,AN1(2)*SDI) 34 | IF (STRIKE.LT.0.) STRIKE=STRIKE+6.2831853 35 | IF (ABS(AN1(3)).LT.EPS) THEN 36 | IF (ABS(STRIKE).LT.EPS) THEN 37 | RAKE=ATAN2(-AN2(3),AN2(1)) 38 | ELSEIF (ABS(ABS(STRIKE)-1.5707963).LT.EPS) THEN 39 | RAKE=ATAN2(-AN2(3),AN2(2)) 40 | ELSE 41 | CF=COS(STRIKE) 42 | SF=SIN(STRIKE) 43 | IF (ABS(CF).GT.ABS(SF)) THEN 44 | CR=AN2(1)/CF 45 | ELSE 46 | CR=AN2(2)/SF 47 | ENDIF 48 | RAKE=ATAN2(-AN2(3),CR) 49 | ENDIF 50 | ELSE 51 | CF=COS(STRIKE) 52 | SF=SIN(STRIKE) 53 | RAKE=ATAN2((AN2(1)*SF-AN2(2)*CF)/(-AN1(3)),AN2(1)*CF 54 | & +AN2(2)*SF) 55 | ENDIF 56 | ENDIF 57 | DIP=DIP*FAC 58 | STRIKE=STRIKE*FAC 59 | RAKE=RAKE*FAC 60 | C 61 | c write(*,*) 'angles' 62 | RETURN 63 | END 64 | -------------------------------------------------------------------------------- /scisola_tools/ISOLA/invert/SUBEVNT3.INC: -------------------------------------------------------------------------------- 1 | subroutine subevnt3(ampl,w,sx) 2 | c input w= seimogram pro kazdou posunutou cas.fci = sloupce matice G 3 | c ampl= momentove vahy ('amplitudy') jednotlivych posunutych seismogramu s jednotkovymi momenty 4 | c output sx= seismogram jako lin kombinacew posunutych cas fci s amplitudami ampl 5 | 6 | c dimension ampl(6) 7 | 8 | dimension sx(8192,21,3) 9 | dimension w(8192,21,3,6) 10 | dimension ntm(21) 11 | logical stat(21) 12 | c******************************* 13 | double precision ampl(6) 14 | c dimension ampl(6) 15 | c******************************* 16 | 17 | common /NUMBERS/ nr,ntim,nmom,isubmax,ifirst,istep,ilast, 18 | * f1,f2,f3,f4,dt 19 | common /ST/ stat,ntm 20 | 21 | c 22 | c 23 | c COMPUTING OPTIMUM SYNT SEISMO 24 | c 25 | 26 | do itim=1,ntim 27 | do ir=1,nr 28 | do icom=1,3 29 | sx(itim,ir,icom)=0. 30 | enddo 31 | enddo 32 | enddo 33 | 34 | 35 | c shiftbase= ! parametr ; vzdalenost mezi trojuhelniky 36 | C nshift=ifix(shiftbase/dt) ! vyjadrena v poctu cas. kroku; zna dt? 37 | c jina moznost je mit casove nebo celocislne posuvy jako pole (indexovane pomoci it) 38 | c coz by umoznovalo snadno jejich nerovnomernost 39 | c mozna to ale neni tak moc dulezite jako moznost mit dva ci vice POLOH zdroju, kazdy z UPLNE jinym zakladnim posunem 40 | c shf=shiftopt + float(i)*shiftbase; nshift= ifix(shf/dt) 41 | 42 | do itim=1,ntim 43 | do ir=1,nr 44 | do icom=1,3 45 | do it=1,6 ! 6 posunu; casem mozna -2,+3 nyni cisluje cas fce kazada bude mit svuj posun 46 | C itshift=it*nshift 47 | sx(itim,ir,icom)=sx(itim,ir,icom) + 48 | * ampl(it)*w(itim,ir,icom,it) !!!!!KAZDA W (...IT) UZ POSUN MA! 49 | enddo ! POTREBUJI VUBEC W JAKO POLE PROMENNYCH IT=1,6 ? VZDYT JE TO TOEZ JEN POSUNUTE 50 | enddo ! JE TO POZUSTATEK KDYZ SE BAZOVE FCE LISILY A;E PROC TO NENECHAT I KDYZ SE TED LISI JEN POSUVEM 51 | enddo 52 | enddo 53 | 54 | 55 | RETURN 56 | END 57 | -------------------------------------------------------------------------------- /scisola_tools/ISOLA17/invert/angles.inc: -------------------------------------------------------------------------------- 1 | SUBROUTINE ANGLES (ANN1,ANN2,DIP,STRIKE,RAKE) 2 | C 3 | C procedure ANGLES determines dip, strike and rake angles from 4 | C nodal plane normals; 5 | C to obtain both the solutions it has to be called twice: 6 | C CALL ANGLES (AN1,AN2,D1,S1,R1) 7 | C CALL ANGLES (AN2,AN1,D2,S2,R2) 8 | C 9 | DIMENSION ANN1(3),AN1(3),ANN2(3),AN2(3) 10 | C 11 | EPS=0.001 12 | FAC=180./3.1415927 13 | IF (ANN1(3).GT.0.) THEN 14 | DO 300 J=1,3 15 | AN2(J)=-ANN2(J) 16 | 300 AN1(J)=-ANN1(J) 17 | ELSE 18 | DO 310 J=1,3 19 | AN2(J)=ANN2(J) 20 | 310 AN1(J)=ANN1(J) 21 | ENDIF 22 | if (an1(3).lt.-0.99) then !!!!!!!!!!!!!!!! 23 | DIP=ACOS(0.999) 24 | else 25 | DIP=ACOS(-AN1(3)) 26 | endif !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! 27 | IF (ABS(ABS(AN1(3))-1.).LT.EPS) THEN 28 | RAKE=0. 29 | STRIKE=ATAN2(AN2(2),AN2(1)) 30 | IF (STRIKE.LT.0.) STRIKE=STRIKE+6.2831853 31 | ELSE 32 | SDI=1./SQRT(1.-AN1(3)*AN1(3)) 33 | STRIKE=ATAN2(-AN1(1)*SDI,AN1(2)*SDI) 34 | IF (STRIKE.LT.0.) STRIKE=STRIKE+6.2831853 35 | IF (ABS(AN1(3)).LT.EPS) THEN 36 | IF (ABS(STRIKE).LT.EPS) THEN 37 | RAKE=ATAN2(-AN2(3),AN2(1)) 38 | ELSEIF (ABS(ABS(STRIKE)-1.5707963).LT.EPS) THEN 39 | RAKE=ATAN2(-AN2(3),AN2(2)) 40 | ELSE 41 | CF=COS(STRIKE) 42 | SF=SIN(STRIKE) 43 | IF (ABS(CF).GT.ABS(SF)) THEN 44 | CR=AN2(1)/CF 45 | ELSE 46 | CR=AN2(2)/SF 47 | ENDIF 48 | RAKE=ATAN2(-AN2(3),CR) 49 | ENDIF 50 | ELSE 51 | CF=COS(STRIKE) 52 | SF=SIN(STRIKE) 53 | RAKE=ATAN2((AN2(1)*SF-AN2(2)*CF)/(-AN1(3)),AN2(1)*CF 54 | & +AN2(2)*SF) 55 | ENDIF 56 | ENDIF 57 | DIP=DIP*FAC 58 | STRIKE=STRIKE*FAC 59 | RAKE=RAKE*FAC 60 | C 61 | c write(*,*) 'angles' 62 | RETURN 63 | END 64 | -------------------------------------------------------------------------------- /scisola_tools/ISOLA/invert/subevnt3_12c.inc: -------------------------------------------------------------------------------- 1 | subroutine subevnt3_12c(ampl,w,sx) 2 | c input w= seimogram pro kazdou posunutou cas.fci = sloupce matice G 3 | c ampl= momentove vahy ('amplitudy') jednotlivych posunutych seismogramu s jednotkovymi momenty 4 | c output sx= seismogram jako lin kombinacew posunutych cas fci s amplitudami ampl 5 | 6 | c dimension ampl(6) 7 | 8 | dimension sx(8192,21,3) 9 | dimension w(8192,21,3,6) 10 | dimension ntm(21) 11 | logical stat(21) 12 | c******************************* 13 | double precision ampl(6) 14 | c dimension ampl(6) 15 | c******************************* 16 | 17 | common /NUMBERS/ nr,ntim,nmom,isubmax,ifirst,istep,ilast, 18 | * ff1(21),ff2(21),ff3(21),ff4(21),dt 19 | common /ST/ stat,ntm 20 | 21 | c 22 | c 23 | c COMPUTING OPTIMUM SYNT SEISMO 24 | c 25 | 26 | do itim=1,ntim 27 | do ir=1,nr 28 | do icom=1,3 29 | sx(itim,ir,icom)=0. 30 | enddo 31 | enddo 32 | enddo 33 | 34 | 35 | c shiftbase= ! parametr ; vzdalenost mezi trojuhelniky 36 | C nshift=ifix(shiftbase/dt) ! vyjadrena v poctu cas. kroku; zna dt? 37 | c jina moznost je mit casove nebo celocislne posuvy jako pole (indexovane pomoci it) 38 | c coz by umoznovalo snadno jejich nerovnomernost 39 | c mozna to ale neni tak moc dulezite jako moznost mit dva ci vice POLOH zdroju, kazdy z UPLNE jinym zakladnim posunem 40 | c shf=shiftopt + float(i)*shiftbase; nshift= ifix(shf/dt) 41 | 42 | do itim=1,ntim 43 | do ir=1,nr 44 | do icom=1,3 45 | do it=1,6 ! 6 posunu; casem mozna -2,+3 nyni cisluje cas fce kazada bude mit svuj posun 46 | C itshift=it*nshift 47 | sx(itim,ir,icom)=sx(itim,ir,icom) + 48 | * ampl(it)*w(itim,ir,icom,it) !!!!!KAZDA W (...IT) UZ POSUN MA! 49 | enddo ! POTREBUJI VUBEC W JAKO POLE PROMENNYCH IT=1,6 ? VZDYT JE TO TOEZ JEN POSUNUTE 50 | enddo ! JE TO POZUSTATEK KDYZ SE BAZOVE FCE LISILY A;E PROC TO NENECHAT I KDYZ SE TED LISI JEN POSUVEM 51 | enddo 52 | enddo 53 | 54 | 55 | RETURN 56 | END 57 | -------------------------------------------------------------------------------- /scisola_tools/ISOLA/invert/manidata.inc: -------------------------------------------------------------------------------- 1 | 2 | subroutine manidata(x,rr) 3 | 4 | c Manipulating the data. Input data x, output data also x (re-written). 5 | c Power of the data rr. 6 | 7 | dimension x(8192,21,3) 8 | dimension ntm(21) 9 | logical stat(21) 10 | 11 | 12 | common /NUMBERS/ nr,ntim,nmom,isubmax,ifirst,istep,ilast, 13 | * f1,f2,f3,f4,dt 14 | 15 | common /ST/ stat,ntm 16 | 17 | c ******************************************************************* 18 | c *************MANIPULATING OBSERVED DATA**************************** 19 | c ******************************************************************* 20 | 21 | do ir=1,nr 22 | do itim=1,ntim 23 | x(itim,ir,1)=0. 24 | x(itim,ir,2)=0. 25 | x(itim,ir,3)=0. 26 | enddo 27 | enddo 28 | 29 | c 30 | c READING velocity SEISMOGRAMS TO BE INVERTED (=DATA) 31 | c 32 | 33 | do ir=1,nr 34 | do itim=1,ntim 35 | nfile=1000+1*ir 36 | read(nfile,*) time, 37 | * x(itim,ir,1),x(itim,ir,2),x(itim,ir,3) 38 | enddo 39 | enddo 40 | 41 | 42 | c 43 | c FILTERING THE DATA 44 | c 45 | do ir=1,nr 46 | do icom=1,3 47 | call filter(f1,f2,f3,f4,dt,x(1,ir,icom)) 48 | enddo 49 | enddo 50 | 51 | 52 | do ir=1,nr ! output of filtered input data 53 | nfile=2000+1*ir 54 | do itim=1,ntim 55 | time=float(itim-1)* dt 56 | write(nfile,'(4(1x,e12.6))') time, 57 | * x(itim,ir,1), x(itim,ir,2), x(itim,ir,3) 58 | enddo 59 | enddo 60 | 61 | 62 | c 63 | c COMPUTING 'POWER' OF THE original DATA (the USED stations ONLY !) 64 | c 65 | 66 | rr=0. 67 | do icom=1,3 !icom=seismo comp. 68 | do ir=1,nr ! ir=station 69 | if(stat(ir)) then 70 | do itim=1,ntim !itim=time 71 | rr=rr+x(itim,ir,icom)*x(itim,ir,icom) 72 | enddo 73 | endif 74 | enddo 75 | enddo 76 | rr=rr*dt 77 | 78 | RETURN 79 | END 80 | 81 | -------------------------------------------------------------------------------- /scisola_tools/ISOLA15/invert/angles.inc: -------------------------------------------------------------------------------- 1 | SUBROUTINE ANGLES (ANN1,ANN2,DIP,STRIKE,RAKE) 2 | C 3 | C procedure ANGLES determines dip, strike and rake angles from 4 | C nodal plane normals; 5 | C to obtain both the solutions it has to be called twice: 6 | C CALL ANGLES (AN1,AN2,D1,S1,R1) 7 | C CALL ANGLES (AN2,AN1,D2,S2,R2) 8 | C 9 | DIMENSION ANN1(3),AN1(3),ANN2(3),AN2(3) 10 | C 11 | EPS=0.001 12 | FAC=180./3.1415927 13 | IF (ANN1(3).GT.0.) THEN 14 | DO 300 J=1,3 15 | AN2(J)=-ANN2(J) 16 | 300 AN1(J)=-ANN1(J) 17 | ELSE 18 | DO 310 J=1,3 19 | AN2(J)=ANN2(J) 20 | 310 AN1(J)=ANN1(J) 21 | ENDIF 22 | if (an1(3).lt.-0.99) then !!!!!!!!!!!!!!!! 23 | DIP=ACOS(0.999) 24 | else 25 | DIP=ACOS(-AN1(3)) 26 | endif !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! 27 | IF (ABS(ABS(AN1(3))-1.).LT.EPS) THEN 28 | RAKE=0. 29 | STRIKE=ATAN2(AN2(2),AN2(1)) 30 | IF (STRIKE.LT.0.) STRIKE=STRIKE+6.2831853 31 | ELSE 32 | SDI=1./SQRT(1.-AN1(3)*AN1(3)) 33 | STRIKE=ATAN2(-AN1(1)*SDI,AN1(2)*SDI) 34 | IF (STRIKE.LT.0.) STRIKE=STRIKE+6.2831853 35 | IF (ABS(AN1(3)).LT.EPS) THEN 36 | IF (ABS(STRIKE).LT.EPS) THEN 37 | RAKE=ATAN2(-AN2(3),AN2(1)) 38 | ELSEIF (ABS(ABS(STRIKE)-1.5707963).LT.EPS) THEN 39 | RAKE=ATAN2(-AN2(3),AN2(2)) 40 | ELSE 41 | CF=COS(STRIKE) 42 | SF=SIN(STRIKE) 43 | IF (ABS(CF).GT.ABS(SF)) THEN 44 | CR=AN2(1)/CF 45 | ELSE 46 | CR=AN2(2)/SF 47 | ENDIF 48 | RAKE=ATAN2(-AN2(3),CR) 49 | ENDIF 50 | ELSE 51 | CF=COS(STRIKE) 52 | SF=SIN(STRIKE) 53 | RAKE=ATAN2((AN2(1)*SF-AN2(2)*CF)/(-AN1(3)),AN2(1)*CF 54 | & +AN2(2)*SF) 55 | ENDIF 56 | ENDIF 57 | DIP=DIP*FAC 58 | STRIKE=STRIKE*FAC 59 | RAKE=RAKE*FAC 60 | C 61 | c write(*,*) 'angles' 62 | RETURN 63 | END 64 | -------------------------------------------------------------------------------- /scisola_tools/ISOLA/invert/manidatasyn.inc: -------------------------------------------------------------------------------- 1 | 2 | subroutine manidatasyn(x,rr) 3 | 4 | c Manipulating the data. Input data x, output data also x (re-written). 5 | c Power of the data rr. 6 | 7 | dimension x(8192,21,3) 8 | dimension ntm(21) 9 | logical stat(21) 10 | 11 | 12 | common /NUMBERS/ nr,ntim,nmom,isubmax,ifirst,istep,ilast, 13 | * f1,f2,f3,f4,dt 14 | 15 | common /ST/ stat,ntm 16 | 17 | c ******************************************************************* 18 | c *************MANIPULATING OBSERVED DATA**************************** 19 | c ******************************************************************* 20 | 21 | do ir=1,nr 22 | do itim=1,ntim 23 | x(itim,ir,1)=0. 24 | x(itim,ir,2)=0. 25 | x(itim,ir,3)=0. 26 | enddo 27 | enddo 28 | 29 | c 30 | c READING velocity SEISMOGRAMS TO BE INVERTED (=DATA) 31 | c 32 | 33 | do ir=1,nr 34 | do itim=1,ntim 35 | nfile=1000+1*ir 36 | read(nfile,*) time, 37 | * x(itim,ir,1),x(itim,ir,2),x(itim,ir,3) 38 | enddo 39 | enddo 40 | 41 | 42 | c 43 | c FILTERING THE DATA !!!!! zmena pro zpravovani SYN dat se vola filterSYN !!!!!!!!!!!!!!!!!!!!!!!!!!!!! 44 | c 45 | do ir=1,nr 46 | do icom=1,3 47 | call filtersyn(f1,f2,f3,f4,dt,x(1,ir,icom)) 48 | enddo 49 | enddo 50 | 51 | do ir=1,nr ! output of filtered input data 52 | nfile=2000+1*ir 53 | do itim=1,ntim 54 | time=float(itim-1)* dt 55 | write(nfile,'(4(1x,e12.6))') time, 56 | * x(itim,ir,1), x(itim,ir,2), x(itim,ir,3) 57 | enddo 58 | enddo 59 | 60 | 61 | c 62 | c COMPUTING 'POWER' OF THE original DATA (the USED stations ONLY !) 63 | c 64 | 65 | rr=0. 66 | do icom=1,3 !icom=seismo comp. 67 | do ir=1,nr ! ir=station 68 | if(stat(ir)) then 69 | do itim=1,ntim !itim=time 70 | rr=rr+x(itim,ir,icom)*x(itim,ir,icom) 71 | enddo 72 | endif 73 | enddo 74 | enddo 75 | rr=rr*dt 76 | 77 | RETURN 78 | END 79 | -------------------------------------------------------------------------------- /scisola_tools/ISOLA/invert/jacobi.inc: -------------------------------------------------------------------------------- 1 | SUBROUTINE JACOBI (N,ITMAX,EPS1,EPS2,EPS3,A,T,EIGEN,AIK) 2 | C 3 | DIMENSION A(3,3),T(3,3),AIK(3),EIGEN(3) 4 | C 5 | DO 100 I=1,N 6 | DO 100 J=1,N 7 | 100 T(I,J)=0. 8 | NM1=N-1 9 | SIGMA1=0. 10 | OFFDSQ=0. 11 | DO 110 I=1,N 12 | SIGMA1=SIGMA1+A(I,I)**2 13 | T(I,I)=1. 14 | IP1=I+1 15 | IF(I.GE.N) GOTO 120 16 | DO 110 J=IP1,N 17 | 110 OFFDSQ=OFFDSQ+A(I,J)**2 18 | 120 S=2.*OFFDSQ+SIGMA1 19 | C 20 | DO 180 ITER=1,ITMAX 21 | DO 160 I=1,NM1 22 | IP1=I+1 23 | DO 160 J=IP1,N 24 | Q=ABS(A(I,I)-A(J,J)) 25 | IF (Q.GT.EPS1) THEN 26 | IF (ABS(A(I,J)).LE.EPS2) GOTO 160 27 | P=2.*A(I,J)*Q/(A(I,I)-A(J,J)) 28 | SPQ=SQRT(P*P+Q*Q) 29 | CSA=SQRT((1.+Q/SPQ)*.5) 30 | SNA=P/(2.*CSA*SPQ) 31 | ELSE 32 | CSA=.707106781186547 33 | SNA=CSA 34 | ENDIF 35 | DO 130 K=1,N 36 | HOLDKI=T(K,I) 37 | T(K,I)=HOLDKI*CSA+T(K,J)*SNA 38 | T(K,J)=HOLDKI*SNA-T(K,J)*CSA 39 | 130 CONTINUE 40 | DO 140 K=1,N 41 | IF (K.LE.J) THEN 42 | AIK(K)=A(I,K) 43 | A(I,K)=CSA*AIK(K)+SNA*A(K,J) 44 | IF (K.EQ.J) A(J,K)=SNA*AIK(K)-CSA*A(J,K) 45 | ELSE 46 | HOLDIK=A(I,K) 47 | A(I,K)=CSA*HOLDIK+SNA*A(J,K) 48 | A(J,K)=SNA*HOLDIK-CSA*A(J,K) 49 | ENDIF 50 | 140 CONTINUE 51 | AIK(J)=SNA*AIK(I)-CSA*AIK(J) 52 | DO 150 K=1,J 53 | IF (K.GT.I) THEN 54 | A(K,J)=SNA*AIK(K)-CSA*A(K,J) 55 | ELSE 56 | HOLDKI=A(K,I) 57 | A(K,I)=CSA*HOLDKI+SNA*A(K,J) 58 | A(K,J)=SNA*HOLDKI-CSA*A(K,J) 59 | ENDIF 60 | 150 CONTINUE 61 | 160 A(I,J)=0. 62 | SIGMA2=0. 63 | DO 170 I=1,N 64 | EIGEN(I)=A(I,I) 65 | SIGMA2=SIGMA2+EIGEN(I)**2 66 | 170 CONTINUE 67 | IF (1.-SIGMA1/SIGMA2.LT.EPS3) GOTO 190 68 | SIGMA1=SIGMA2 69 | 180 CONTINUE 70 | WRITE (*,'(//'' No convergence with '',I3,'' iterations''//)') 71 | & ITMAX 72 | C 73 | 190 continue 74 | c write(*,*) 'jacobi' 75 | RETURN 76 | END 77 | -------------------------------------------------------------------------------- /scisola_tools/ISOLA/invert/manidata_12c.inc: -------------------------------------------------------------------------------- 1 | 2 | subroutine manidata_12c(x,rr) 3 | 4 | c Manipulating the data. Input data x, output data also x (re-written). 5 | c Power of the data rr. 6 | 7 | dimension x(8192,21,3) 8 | dimension ntm(21) 9 | logical stat(21) 10 | 11 | 12 | common /NUMBERS/ nr,ntim,nmom,isubmax,ifirst,istep,ilast, 13 | * ff1(21),ff2(21),ff3(21),ff4(21),dt 14 | 15 | common /ST/ stat,ntm 16 | 17 | c ******************************************************************* 18 | c *************MANIPULATING OBSERVED DATA**************************** 19 | c ******************************************************************* 20 | 21 | do ir=1,nr 22 | do itim=1,ntim 23 | x(itim,ir,1)=0. 24 | x(itim,ir,2)=0. 25 | x(itim,ir,3)=0. 26 | enddo 27 | enddo 28 | 29 | c 30 | c READING velocity SEISMOGRAMS TO BE INVERTED (=DATA) 31 | c 32 | 33 | do ir=1,nr 34 | do itim=1,ntim 35 | nfile=1000+1*ir 36 | read(nfile,*) time, 37 | * x(itim,ir,1),x(itim,ir,2),x(itim,ir,3) 38 | enddo 39 | enddo 40 | 41 | 42 | c 43 | c FILTERING THE DATA 44 | c 45 | do ir=1,nr 46 | f1=ff1(ir) 47 | f2=ff2(ir) 48 | f3=ff3(ir) 49 | f4=ff4(ir) 50 | do icom=1,3 51 | call filter(f1,f2,f3,f4,dt,x(1,ir,icom)) 52 | enddo 53 | enddo 54 | 55 | 56 | do ir=1,nr ! output of filtered input data 57 | nfile=2000+1*ir 58 | do itim=1,ntim 59 | time=float(itim-1)* dt 60 | write(nfile,'(4(1x,e12.6))') time, 61 | * x(itim,ir,1), x(itim,ir,2), x(itim,ir,3) 62 | enddo 63 | enddo 64 | 65 | 66 | c 67 | c COMPUTING 'POWER' OF THE original DATA (the USED stations ONLY !) 68 | c 69 | 70 | rr=0. 71 | do icom=1,3 !icom=seismo comp. 72 | do ir=1,nr ! ir=station 73 | if(stat(ir)) then 74 | do itim=1,ntim !itim=time 75 | rr=rr+x(itim,ir,icom)*x(itim,ir,icom) 76 | enddo 77 | endif 78 | enddo 79 | enddo 80 | rr=rr*dt 81 | 82 | RETURN 83 | END 84 | 85 | -------------------------------------------------------------------------------- /scisola_tools/ISOLA/invert/manidatacut.inc: -------------------------------------------------------------------------------- 1 | 2 | subroutine manidataCUT(x,rr) 3 | 4 | c cutting output after 6000dt !!!!!! 5 | c Manipulating the data. Input data x, output data also x (re-written). 6 | c Power of the data rr. 7 | 8 | dimension x(8192,21,3) 9 | dimension ntm(21) 10 | logical stat(21) 11 | 12 | 13 | common /NUMBERS/ nr,ntim,nmom,isubmax,ifirst,istep,ilast, 14 | * f1,f2,f3,f4,dt 15 | 16 | common /ST/ stat,ntm 17 | 18 | c ******************************************************************* 19 | c *************MANIPULATING OBSERVED DATA**************************** 20 | c ******************************************************************* 21 | 22 | do ir=1,nr 23 | do itim=1,ntim 24 | x(itim,ir,1)=0. 25 | x(itim,ir,2)=0. 26 | x(itim,ir,3)=0. 27 | enddo 28 | enddo 29 | 30 | c 31 | c READING velocity SEISMOGRAMS TO BE INVERTED (=DATA) 32 | c 33 | 34 | do ir=1,nr 35 | do itim=1,ntim 36 | nfile=1000+1*ir 37 | read(nfile,*) time, 38 | * x(itim,ir,1),x(itim,ir,2),x(itim,ir,3) 39 | enddo 40 | enddo 41 | 42 | 43 | c 44 | c FILTERING THE DATA 45 | c 46 | do ir=1,nr 47 | do icom=1,3 48 | call filter(f1,f2,f3,f4,dt,x(1,ir,icom)) 49 | enddo 50 | enddo 51 | 52 | zero=0. 53 | do ir=1,nr ! output of filtered input data 54 | nfile=2000+1*ir 55 | do itim=1,ntim 56 | time=float(itim-1)* dt 57 | if(itim.le.6000) then 58 | write(nfile,'(4(1x,e12.6))') time, 59 | * x(itim,ir,1), x(itim,ir,2), x(itim,ir,3) 60 | else 61 | write(nfile,'(4(1x,e12.6))') time,zero,zero,zero 62 | endif 63 | enddo 64 | enddo 65 | 66 | 67 | c 68 | c COMPUTING 'POWER' OF THE original DATA (the USED stations ONLY !) 69 | c 70 | 71 | rr=0. 72 | do icom=1,3 !icom=seismo comp. 73 | do ir=1,nr ! ir=station 74 | if(stat(ir)) then 75 | do itim=1,ntim !itim=time 76 | rr=rr+x(itim,ir,icom)*x(itim,ir,icom) 77 | enddo 78 | endif 79 | enddo 80 | enddo 81 | rr=rr*dt 82 | 83 | RETURN 84 | END 85 | 86 | -------------------------------------------------------------------------------- /scisola_tools/ISOLA15/invert/jacobi.inc: -------------------------------------------------------------------------------- 1 | SUBROUTINE JACOBI (N,ITMAX,EPS1,EPS2,EPS3,A,T,EIGEN,AIK) 2 | C 3 | DIMENSION A(3,3),T(3,3),AIK(3),EIGEN(3) 4 | C 5 | DO 100 I=1,N 6 | DO 100 J=1,N 7 | 100 T(I,J)=0. 8 | NM1=N-1 9 | SIGMA1=0. 10 | OFFDSQ=0. 11 | DO 110 I=1,N 12 | SIGMA1=SIGMA1+A(I,I)**2 13 | T(I,I)=1. 14 | IP1=I+1 15 | IF(I.GE.N) GOTO 120 16 | DO 110 J=IP1,N 17 | 110 OFFDSQ=OFFDSQ+A(I,J)**2 18 | 120 S=2.*OFFDSQ+SIGMA1 19 | C 20 | DO 180 ITER=1,ITMAX 21 | DO 160 I=1,NM1 22 | IP1=I+1 23 | DO 160 J=IP1,N 24 | Q=ABS(A(I,I)-A(J,J)) 25 | IF (Q.GT.EPS1) THEN 26 | IF (ABS(A(I,J)).LE.EPS2) GOTO 160 27 | P=2.*A(I,J)*Q/(A(I,I)-A(J,J)) 28 | SPQ=SQRT(P*P+Q*Q) 29 | CSA=SQRT((1.+Q/SPQ)*.5) 30 | SNA=P/(2.*CSA*SPQ) 31 | ELSE 32 | CSA=.707106781186547 33 | SNA=CSA 34 | ENDIF 35 | DO 130 K=1,N 36 | HOLDKI=T(K,I) 37 | T(K,I)=HOLDKI*CSA+T(K,J)*SNA 38 | T(K,J)=HOLDKI*SNA-T(K,J)*CSA 39 | 130 CONTINUE 40 | DO 140 K=1,N 41 | IF (K.LE.J) THEN 42 | AIK(K)=A(I,K) 43 | A(I,K)=CSA*AIK(K)+SNA*A(K,J) 44 | IF (K.EQ.J) A(J,K)=SNA*AIK(K)-CSA*A(J,K) 45 | ELSE 46 | HOLDIK=A(I,K) 47 | A(I,K)=CSA*HOLDIK+SNA*A(J,K) 48 | A(J,K)=SNA*HOLDIK-CSA*A(J,K) 49 | ENDIF 50 | 140 CONTINUE 51 | AIK(J)=SNA*AIK(I)-CSA*AIK(J) 52 | DO 150 K=1,J 53 | IF (K.GT.I) THEN 54 | A(K,J)=SNA*AIK(K)-CSA*A(K,J) 55 | ELSE 56 | HOLDKI=A(K,I) 57 | A(K,I)=CSA*HOLDKI+SNA*A(K,J) 58 | A(K,J)=SNA*HOLDKI-CSA*A(K,J) 59 | ENDIF 60 | 150 CONTINUE 61 | 160 A(I,J)=0. 62 | SIGMA2=0. 63 | DO 170 I=1,N 64 | EIGEN(I)=A(I,I) 65 | SIGMA2=SIGMA2+EIGEN(I)**2 66 | 170 CONTINUE 67 | IF (1.-SIGMA1/SIGMA2.LT.EPS3) GOTO 190 68 | SIGMA1=SIGMA2 69 | 180 CONTINUE 70 | WRITE (*,'(//'' No convergence with '',I3,'' iterations''//)') 71 | & ITMAX 72 | C 73 | 190 continue 74 | c write(*,*) 'jacobi' 75 | RETURN 76 | END 77 | -------------------------------------------------------------------------------- /scisola_tools/ISOLA17/invert/jacobi.inc: -------------------------------------------------------------------------------- 1 | SUBROUTINE JACOBI (N,ITMAX,EPS1,EPS2,EPS3,A,T,EIGEN,AIK) 2 | C 3 | DIMENSION A(3,3),T(3,3),AIK(3),EIGEN(3) 4 | 5 | DO 100 I=1,N 6 | DO 100 J=1,N 7 | 100 T(I,J)=0. 8 | NM1=N-1 9 | SIGMA1=0. 10 | OFFDSQ=0. 11 | DO 110 I=1,N 12 | SIGMA1=SIGMA1+A(I,I)**2 13 | T(I,I)=1. 14 | IP1=I+1 15 | IF(I.GE.N) GOTO 120 16 | DO 110 J=IP1,N 17 | 110 OFFDSQ=OFFDSQ+A(I,J)**2 18 | 120 S=2.*OFFDSQ+SIGMA1 19 | C 20 | DO 180 ITER=1,ITMAX 21 | DO 160 I=1,NM1 22 | IP1=I+1 23 | DO 160 J=IP1,N 24 | Q=ABS(A(I,I)-A(J,J)) 25 | IF (Q.GT.EPS1) THEN 26 | IF (ABS(A(I,J)).LE.EPS2) GOTO 160 27 | P=2.*A(I,J)*Q/(A(I,I)-A(J,J)) 28 | SPQ=SQRT(P*P+Q*Q) 29 | CSA=SQRT((1.+Q/SPQ)*.5) 30 | SNA=P/(2.*CSA*SPQ) 31 | ELSE 32 | CSA=.707106781186547 33 | SNA=CSA 34 | ENDIF 35 | DO 130 K=1,N 36 | HOLDKI=T(K,I) 37 | T(K,I)=HOLDKI*CSA+T(K,J)*SNA 38 | T(K,J)=HOLDKI*SNA-T(K,J)*CSA 39 | 130 CONTINUE 40 | DO 140 K=1,N 41 | IF (K.LE.J) THEN 42 | AIK(K)=A(I,K) 43 | A(I,K)=CSA*AIK(K)+SNA*A(K,J) 44 | IF (K.EQ.J) A(J,K)=SNA*AIK(K)-CSA*A(J,K) 45 | ELSE 46 | HOLDIK=A(I,K) 47 | A(I,K)=CSA*HOLDIK+SNA*A(J,K) 48 | A(J,K)=SNA*HOLDIK-CSA*A(J,K) 49 | ENDIF 50 | 140 CONTINUE 51 | AIK(J)=SNA*AIK(I)-CSA*AIK(J) 52 | DO 150 K=1,J 53 | IF (K.GT.I) THEN 54 | A(K,J)=SNA*AIK(K)-CSA*A(K,J) 55 | ELSE 56 | HOLDKI=A(K,I) 57 | A(K,I)=CSA*HOLDKI+SNA*A(K,J) 58 | A(K,J)=SNA*HOLDKI-CSA*A(K,J) 59 | ENDIF 60 | 150 CONTINUE 61 | 160 A(I,J)=0. 62 | SIGMA2=0.0D+0 63 | DO 170 I=1,N 64 | EIGEN(I)=A(I,I) 65 | SIGMA2=SIGMA2+EIGEN(I)**2 66 | 170 CONTINUE 67 | c write(*,*) eigen(1), eigen(2), eigen(3) 68 | c write(*,*) "here" 69 | c write(*,*) sigma1,sigma2,sigma1/sigma2,eps3 70 | IF (1.0-SIGMA1/SIGMA2.LT.EPS3) GOTO 190 71 | SIGMA1=SIGMA2 72 | 180 CONTINUE 73 | WRITE (*,'(//'' No convergence with '',I3,'' iterations''//)') 74 | & ITMAX 75 | C 76 | 190 continue 77 | c write(*,*) 'jacobi' 78 | RETURN 79 | END 80 | -------------------------------------------------------------------------------- /scisola_dev/dsg/about.ui: -------------------------------------------------------------------------------- 1 | 2 | 3 | Dialog 4 | 5 | 6 | 7 | 0 8 | 0 9 | 500 10 | 400 11 | 12 | 13 | 14 | about 15 | 16 | 17 | 18 | :/logo/beachball.png:/logo/beachball.png 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | :/logo/logo6.png 28 | 29 | 30 | Qt::AlignCenter 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | Scisola v1.0 41 | Copyright © 2014 Triantafyllis Nikolaos 42 | Licensed under the terms of 43 | the GNU General Public License (GPLv2) 44 | 45 | Notes: 46 | Scisola v1.0 developed as a master thesis at 47 | University of Patras, Greece 48 | Computer Engineering and Informatics Department 49 | 50 | Special Thanks to: 51 | Sokos Efthimios, esokos@upatras.gr 52 | Ilias Aristidis, aristeid@ceid.upatras.gr 53 | Pavlidis Georgios, pvlds@ceid.upatras.gr 54 | 55 | Feedback & Questions to: 56 | Triantafyllis Nikolaos, triantafyl@ceid.upatras.gr 57 | 58 | 59 | Qt::AlignCenter 60 | 61 | 62 | 63 | 64 | 65 | 66 | Qt::Vertical 67 | 68 | 69 | QSizePolicy::Preferred 70 | 71 | 72 | 73 | 20 74 | 40 75 | 76 | 77 | 78 | 79 | 80 | 81 | 82 | 83 | 84 | 85 | 86 | -------------------------------------------------------------------------------- /scisola_tools/ISOLA/invert/oneinv3.inc: -------------------------------------------------------------------------------- 1 | subroutine oneinv3(x,dur,xmomreq,w,rinv,ampl) 2 | 3 | c Input: x=data, w= seismograms for different time fctns, = columns of matrix G 4 | c Output: ampl = amplitudes of time fctns (solution of matrix system) 5 | 6 | dimension g(6),rinv(6,6) 7 | dimension x(8192,21,3) 8 | dimension w(8192,21,3,6) 9 | c ******************************* 10 | double precision ampl(6) 11 | c dimension ampl(6) 12 | c ******************************* 13 | dimension ntm(21) 14 | dimension weig(21,3) 15 | logical stat(21) 16 | 17 | 18 | common /NUMBERS/ nr,ntim,nmom,isubmax,ifirst,istep,ilast, 19 | * f1,f2,f3,f4,dt 20 | common /ST/ stat,ntm 21 | common /WEI/ weig 22 | 23 | c 24 | c FORMING RIGHT-HAND SIDE OF THE SYSTEM 25 | c 26 | 27 | c nmom passed from common; number of time functions, hence aplitudes to determine 28 | do it=1,nmom !it ... time functions 29 | g(it)=0. !itim time 30 | do icom=1,3 !icom seismo comp. 31 | do ir=1,nr !ir station 32 | if(stat(ir)) then 33 | do itim=1,ntim 34 | 35 | c nove, vymena posledni radky dat za moment ele jen zde, jinak se data nemeni 36 | c if(itim.eq.8192.and.ir.eq.nr.and.icom.eq.3) then 37 | c xweig=xmomreq*1.e-22 *weig(ir,icom) ** 2. 38 | c else 39 | xweig=x(itim,ir,icom)*weig(ir,icom) ** 2. 40 | c endif 41 | c 42 | c if(itim.eq.8192.and.ir.eq.nr.and.icom.eq.3) then 43 | c g(it)=g(it)+ 44 | c * 1.e-22 *xweig * 1.e20 45 | c else 46 | g(it)=g(it)+ 47 | * w(itim,ir,icom,it)*xweig * 1.e20 48 | c endif 49 | 50 | 51 | enddo 52 | endif 53 | enddo 54 | enddo 55 | g(it)=g(it)*dt 56 | 57 | 58 | enddo 59 | 60 | 61 | c 62 | c APPLYING INVERSE MATRIX TO THE RIGHT-HAND SIDE (WITHIN SHIFT LOOP) 63 | c 64 | 65 | 66 | do n=1,nmom 67 | ampl(n)=0. 68 | do m=1,nmom 69 | ampl(n)=ampl(n)+ rinv(n,m)*g(m) 70 | enddo 71 | enddo 72 | 73 | 74 | RETURN 75 | END 76 | -------------------------------------------------------------------------------- /scisola_tools/ISOLA/invert/oneinv3_12c.inc: -------------------------------------------------------------------------------- 1 | subroutine oneinv3_12c(x,dur,xmomreq,w,rinv,ampl) 2 | 3 | c Input: x=data, w= seismograms for different time fctns, = columns of matrix G 4 | c Output: ampl = amplitudes of time fctns (solution of matrix system) 5 | 6 | dimension g(6),rinv(6,6) 7 | dimension x(8192,21,3) 8 | dimension w(8192,21,3,6) 9 | c ******************************* 10 | double precision ampl(6) 11 | c dimension ampl(6) 12 | c ******************************* 13 | dimension ntm(21) 14 | dimension weig(21,3) 15 | logical stat(21) 16 | 17 | 18 | common /NUMBERS/ nr,ntim,nmom,isubmax,ifirst,istep,ilast, 19 | * ff1(21),ff2(21),ff3(21),ff4(21),dt 20 | common /ST/ stat,ntm 21 | common /WEI/ weig 22 | 23 | c 24 | c FORMING RIGHT-HAND SIDE OF THE SYSTEM 25 | c 26 | 27 | c nmom passed from common; number of time functions, hence aplitudes to determine 28 | do it=1,nmom !it ... time functions 29 | g(it)=0. !itim time 30 | do icom=1,3 !icom seismo comp. 31 | do ir=1,nr !ir station 32 | if(stat(ir)) then 33 | do itim=1,ntim 34 | 35 | c nove, vymena posledni radky dat za moment ele jen zde, jinak se data nemeni 36 | c if(itim.eq.8192.and.ir.eq.nr.and.icom.eq.3) then 37 | c xweig=xmomreq*1.e-22 *weig(ir,icom) ** 2. 38 | c else 39 | xweig=x(itim,ir,icom)*weig(ir,icom) ** 2. 40 | c endif 41 | c 42 | c if(itim.eq.8192.and.ir.eq.nr.and.icom.eq.3) then 43 | c g(it)=g(it)+ 44 | c * 1.e-22 *xweig * 1.e20 45 | c else 46 | g(it)=g(it)+ 47 | * w(itim,ir,icom,it)*xweig * 1.e20 48 | c endif 49 | 50 | 51 | enddo 52 | endif 53 | enddo 54 | enddo 55 | g(it)=g(it)*dt 56 | 57 | 58 | enddo 59 | 60 | 61 | c 62 | c APPLYING INVERSE MATRIX TO THE RIGHT-HAND SIDE (WITHIN SHIFT LOOP) 63 | c 64 | 65 | 66 | do n=1,nmom 67 | ampl(n)=0. 68 | do m=1,nmom 69 | ampl(n)=ampl(n)+ rinv(n,m)*g(m) 70 | enddo 71 | enddo 72 | 73 | 74 | RETURN 75 | END 76 | -------------------------------------------------------------------------------- /scisola_tools/requirements.txt: -------------------------------------------------------------------------------- 1 | adium-theme-ubuntu==0.3.4 2 | attrs==15.2.0 3 | backports.ssl-match-hostname==3.5.0.1 4 | basemap==1.0.7 5 | beautifulsoup4==4.4.1 6 | blinker==1.3 7 | bzr==2.7.0 8 | bzr-builddeb==2.8.6 9 | cached-property==1.5.1 10 | certifi==2017.4.17 11 | chardet==3.0.4 12 | configobj==5.0.6 13 | cryptography==3.3.2 14 | cycler==0.10.0 15 | debtags==2.0 16 | decorator==4.0.11 17 | defer==1.0.6 18 | defusedxml==0.4.1 19 | dirspec==13.10 20 | distro-info===0.14build1 21 | docker==3.5.1 22 | docker-compose==1.23.1 23 | docker-pycreds==0.3.0 24 | dockerpty==0.4.1 25 | docopt==0.6.2 26 | duplicity==0.7.6 27 | ecdsa==0.13.3 28 | enum34==1.1.2 29 | funcsigs==0.4 30 | functools32==3.2.3.post2 31 | future==0.16.0 32 | html5lib==0.999999999 33 | httplib2==0.19.0 34 | idna==2.5 35 | ipaddress==1.0.16 36 | ipython==7.16.3 37 | jsonschema==2.6.0 38 | keyring==7.3 39 | launchpadlib==1.10.3 40 | lazr.restfulclient==0.13.4 41 | lazr.uri==1.0.3 42 | lockfile==0.12.2 43 | lxml==4.9.1 44 | M2Crypto==0.22.6rc4 45 | matplotlib==2.0.2 46 | mock==1.0.1 47 | mopad==0.9b0 48 | mysqlclient==1.3.7 49 | ndg-httpsclient==0.4.0 50 | nose==1.3.4 51 | numpy==1.22.0 52 | oauth==1.0.1 53 | oauthlib==1.0.3 54 | obspy==1.0.3 55 | oneconf==0.3.9 56 | PAM==0.4.2 57 | paramiko==2.10.1 58 | pbr==1.8.0 59 | pexpect==4.0.1 60 | Pillow==9.0.1 61 | piston-mini-client==0.7.5 62 | psycopg2==2.6.1 63 | ptyprocess==0.5 64 | pyasn1==0.1.9 65 | pyasn1-modules==0.0.7 66 | pycrypto==2.6.1 67 | pycups==1.9.73 68 | pycurl==7.43.0 69 | pydns==2.3.6 70 | pygobject==3.20.0 71 | pygpgme==0.3 72 | PyJWT==1.3.0 73 | PyMySQL==0.7.2 74 | pyOpenSSL==17.5.0 75 | pyparsing==2.2.0 76 | pyserial==3.0.1 77 | Pyste==0.9.10 78 | python-apt==1.1.0b1 79 | python-dateutil==2.6.0 80 | python-debian==0.1.27 81 | python-debianbts==2.6.0 82 | pytz==2017.2 83 | pyxdg==0.26 84 | PyYAML==5.4 85 | reportbug===6.6.6ubuntu1 86 | requests==2.20.0 87 | scipy==0.19.0 88 | SecretStorage==2.1.3 89 | service-identity==16.0.0 90 | simplegeneric==0.8.1 91 | simplejson==3.8.1 92 | six==1.11.0 93 | SOAPpy==0.12.22 94 | software-center-aptd-plugins==0.0.0 95 | SQLAlchemy==1.3.0 96 | subprocess32==3.2.7 97 | suds==1.0.0 98 | suds-jurko==0.7.dev0 99 | texttable==0.9.1 100 | tornado==4.2.1 101 | Twisted==22.4.0 102 | ubuntu-dev-tools===0.155ubuntu2 103 | ubuntuone-client-data==14.4 104 | unity-lens-photos==1.0 105 | urllib3==1.26.5 106 | wadllib==1.3.2 107 | websocket-client==0.54.0 108 | wstools==0.4.3 109 | zope.interface==4.1.3 110 | -------------------------------------------------------------------------------- /scisola_dev/dsg/stations.ui: -------------------------------------------------------------------------------- 1 | 2 | 3 | MainWindow 4 | 5 | 6 | 7 | 0 8 | 0 9 | 800 10 | 600 11 | 12 | 13 | 14 | stations 15 | 16 | 17 | 18 | :/logo/beachball.png:/logo/beachball.png 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | true 28 | 29 | 30 | 31 | 32 | 0 33 | 0 34 | 778 35 | 531 36 | 37 | 38 | 39 | 40 | 41 | 42 | true 43 | 44 | 45 | 46 | 47 | 48 | 49 | 50 | 51 | apply 52 | 53 | 54 | 55 | :/icons/start.png:/icons/start.png 56 | 57 | 58 | 59 | 60 | 61 | 62 | 63 | 64 | 65 | 66 | 67 | 68 | 69 | 70 | 71 | 72 | 0 73 | 0 74 | 800 75 | 25 76 | 77 | 78 | 79 | 80 | 81 | 82 | 83 | 84 | 85 | 86 | -------------------------------------------------------------------------------- /scisola/src/lib/gui/about.py: -------------------------------------------------------------------------------- 1 | # -*- coding: utf-8 -*- 2 | 3 | # Form implementation generated from reading ui file 'about.ui' 4 | # 5 | # Created: Tue Jul 29 00:46:47 2014 6 | # by: PyQt4 UI code generator 4.10 7 | # 8 | # WARNING! All changes made in this file will be lost! 9 | 10 | from PyQt4 import QtCore, QtGui 11 | 12 | try: 13 | _fromUtf8 = QtCore.QString.fromUtf8 14 | except AttributeError: 15 | def _fromUtf8(s): 16 | return s 17 | 18 | try: 19 | _encoding = QtGui.QApplication.UnicodeUTF8 20 | def _translate(context, text, disambig): 21 | return QtGui.QApplication.translate(context, text, disambig, _encoding) 22 | except AttributeError: 23 | def _translate(context, text, disambig): 24 | return QtGui.QApplication.translate(context, text, disambig) 25 | 26 | class Ui_Dialog(object): 27 | def setupUi(self, Dialog): 28 | Dialog.setObjectName(_fromUtf8("Dialog")) 29 | Dialog.resize(500, 400) 30 | icon = QtGui.QIcon() 31 | icon.addPixmap(QtGui.QPixmap(_fromUtf8(":/logo/beachball.png")), QtGui.QIcon.Normal, QtGui.QIcon.Off) 32 | Dialog.setWindowIcon(icon) 33 | self.verticalLayout = QtGui.QVBoxLayout(Dialog) 34 | self.verticalLayout.setObjectName(_fromUtf8("verticalLayout")) 35 | self.label = QtGui.QLabel(Dialog) 36 | self.label.setText(_fromUtf8("")) 37 | self.label.setPixmap(QtGui.QPixmap(_fromUtf8(":/logo/logo6.png"))) 38 | self.label.setAlignment(QtCore.Qt.AlignCenter) 39 | self.label.setObjectName(_fromUtf8("label")) 40 | self.verticalLayout.addWidget(self.label) 41 | self.label_2 = QtGui.QLabel(Dialog) 42 | self.label_2.setAlignment(QtCore.Qt.AlignCenter) 43 | self.label_2.setObjectName(_fromUtf8("label_2")) 44 | self.verticalLayout.addWidget(self.label_2) 45 | spacerItem = QtGui.QSpacerItem(20, 40, QtGui.QSizePolicy.Minimum, QtGui.QSizePolicy.Preferred) 46 | self.verticalLayout.addItem(spacerItem) 47 | 48 | self.retranslateUi(Dialog) 49 | QtCore.QMetaObject.connectSlotsByName(Dialog) 50 | 51 | def retranslateUi(self, Dialog): 52 | Dialog.setWindowTitle(_translate("Dialog", "about", None)) 53 | self.label_2.setText(_translate("Dialog", "\n" 54 | "\n" 55 | "\n" 56 | "Scisola v1.0\n" 57 | "Copyright © 2014 Triantafyllis Nikolaos\n" 58 | "Licensed under the terms of \n" 59 | "the GNU General Public License (GPLv2)\n" 60 | "\n" 61 | "Notes:\n" 62 | "Scisola v1.0 developed as a master thesis at \n" 63 | "University of Patras, Greece\n" 64 | "Computer Engineering and Informatics Department\n" 65 | "\n" 66 | "Special Thanks to:\n" 67 | "Sokos Efthimios, esokos@upatras.gr\n" 68 | "Ilias Aristidis, aristeid@ceid.upatras.gr\n" 69 | "Pavlidis Georgios, pvlds@ceid.upatras.gr\n" 70 | "\n" 71 | "Feedback & Questions to:\n" 72 | "Triantafyllis Nikolaos, triantafyl@ceid.upatras.gr", None)) 73 | 74 | import icons_rc 75 | -------------------------------------------------------------------------------- /scisola_tools/ISOLA/invert/jacobinr.inc: -------------------------------------------------------------------------------- 1 | c********************************************JACOBI Num Rec ************* 2 | 3 | SUBROUTINE JACOBInr(a,n,np,d,v,nrot) 4 | INTEGER n,np,nrot,NMAX 5 | REAL a(np,np),d(np),v(np,np) 6 | PARAMETER (NMAX=500) 7 | INTEGER i,ip,iq,j 8 | REAL c,g,h,s,sm,t,tau,theta,tresh,b(NMAX),z(NMAX) 9 | do 12 ip=1,n 10 | do 11 iq=1,n 11 | v(ip,iq)=0. 12 | 11 continue 13 | v(ip,ip)=1. 14 | 12 continue 15 | do 13 ip=1,n 16 | b(ip)=a(ip,ip) 17 | d(ip)=b(ip) 18 | z(ip)=0. 19 | 13 continue 20 | nrot=0 21 | do 24 i=1,50 22 | sm=0. 23 | do 15 ip=1,n-1 24 | do 14 iq=ip+1,n 25 | sm=sm+abs(a(ip,iq)) 26 | 14 continue 27 | 15 continue 28 | if(sm.eq.0.)return 29 | if(i.lt.4)then 30 | tresh=0.2*sm/n**2 31 | else 32 | tresh=0. 33 | endif 34 | do 22 ip=1,n-1 35 | do 21 iq=ip+1,n 36 | g=100.*abs(a(ip,iq)) 37 | if((i.gt.4).and.(abs(d(ip))+ 38 | *g.eq.abs(d(ip))).and.(abs(d(iq))+g.eq.abs(d(iq))))then 39 | a(ip,iq)=0. 40 | else if(abs(a(ip,iq)).gt.tresh)then 41 | h=d(iq)-d(ip) 42 | if(abs(h)+g.eq.abs(h))then 43 | t=a(ip,iq)/h 44 | else 45 | theta=0.5*h/a(ip,iq) 46 | t=1./(abs(theta)+sqrt(1.+theta**2)) 47 | if(theta.lt.0.)t=-t 48 | endif 49 | c=1./sqrt(1+t**2) 50 | s=t*c 51 | tau=s/(1.+c) 52 | h=t*a(ip,iq) 53 | z(ip)=z(ip)-h 54 | z(iq)=z(iq)+h 55 | d(ip)=d(ip)-h 56 | d(iq)=d(iq)+h 57 | a(ip,iq)=0. 58 | do 16 j=1,ip-1 59 | g=a(j,ip) 60 | h=a(j,iq) 61 | a(j,ip)=g-s*(h+g*tau) 62 | a(j,iq)=h+s*(g-h*tau) 63 | 16 continue 64 | do 17 j=ip+1,iq-1 65 | g=a(ip,j) 66 | h=a(j,iq) 67 | a(ip,j)=g-s*(h+g*tau) 68 | a(j,iq)=h+s*(g-h*tau) 69 | 17 continue 70 | do 18 j=iq+1,n 71 | g=a(ip,j) 72 | h=a(iq,j) 73 | a(ip,j)=g-s*(h+g*tau) 74 | a(iq,j)=h+s*(g-h*tau) 75 | 18 continue 76 | do 19 j=1,n 77 | g=v(j,ip) 78 | h=v(j,iq) 79 | v(j,ip)=g-s*(h+g*tau) 80 | v(j,iq)=h+s*(g-h*tau) 81 | 19 continue 82 | nrot=nrot+1 83 | endif 84 | 21 continue 85 | 22 continue 86 | do 23 ip=1,n 87 | b(ip)=b(ip)+z(ip) 88 | d(ip)=b(ip) 89 | z(ip)=0. 90 | 23 continue 91 | 24 continue 92 | call newpause('too many iterations in jacobi') 93 | return 94 | END 95 | -------------------------------------------------------------------------------- /scisola_tools/ISOLA17/invert/jacobinr.inc: -------------------------------------------------------------------------------- 1 | c********************************************JACOBI Num Rec ************* 2 | SUBROUTINE JACOBInr(a,n,np,d,v,nrot) 3 | INTEGER n,np,nrot,NMAX 4 | REAL a(np,np),d(np),v(np,np) 5 | PARAMETER (NMAX=500) 6 | INTEGER i,ip,iq,j 7 | REAL*8 c,g,h,s,sm,t,tau,theta,tresh,b(NMAX),z(NMAX) 8 | do 12 ip=1,n 9 | do 11 iq=1,n 10 | v(ip,iq)=0. 11 | 11 continue 12 | v(ip,ip)=1. 13 | 12 continue 14 | do 13 ip=1,n 15 | b(ip)=a(ip,ip) 16 | d(ip)=b(ip) 17 | z(ip)=0. 18 | 13 continue 19 | nrot=0 20 | do 24 i=1,50 21 | sm=0. 22 | do 15 ip=1,n-1 23 | do 14 iq=ip+1,n 24 | sm=sm+abs(a(ip,iq)) 25 | 14 continue 26 | 15 continue 27 | if(sm.eq.0.)return 28 | if(i.lt.4)then 29 | tresh=0.2*sm/n**2 30 | else 31 | tresh=0. 32 | endif 33 | do 22 ip=1,n-1 34 | do 21 iq=ip+1,n 35 | g=100.*abs(a(ip,iq)) 36 | if((i.gt.4).and.(abs(d(ip))+ 37 | *g.eq.abs(d(ip))).and.(abs(d(iq))+g.eq.abs(d(iq))))then 38 | a(ip,iq)=0. 39 | else if(abs(a(ip,iq)).gt.tresh)then 40 | h=d(iq)-d(ip) 41 | if(abs(h)+g.eq.abs(h))then 42 | t=a(ip,iq)/h 43 | else 44 | theta=0.5*h/a(ip,iq) 45 | t=1./(abs(theta)+sqrt(1.+theta**2)) 46 | if(theta.lt.0.)t=-t 47 | endif 48 | c=1./sqrt(1+t**2) 49 | s=t*c 50 | tau=s/(1.+c) 51 | h=t*a(ip,iq) 52 | z(ip)=z(ip)-h 53 | z(iq)=z(iq)+h 54 | d(ip)=d(ip)-h 55 | d(iq)=d(iq)+h 56 | a(ip,iq)=0. 57 | do 16 j=1,ip-1 58 | g=a(j,ip) 59 | h=a(j,iq) 60 | a(j,ip)=g-s*(h+g*tau) 61 | a(j,iq)=h+s*(g-h*tau) 62 | 16 continue 63 | do 17 j=ip+1,iq-1 64 | g=a(ip,j) 65 | h=a(j,iq) 66 | a(ip,j)=g-s*(h+g*tau) 67 | a(j,iq)=h+s*(g-h*tau) 68 | 17 continue 69 | do 18 j=iq+1,n 70 | g=a(ip,j) 71 | h=a(iq,j) 72 | a(ip,j)=g-s*(h+g*tau) 73 | a(iq,j)=h+s*(g-h*tau) 74 | 18 continue 75 | do 19 j=1,n 76 | g=v(j,ip) 77 | h=v(j,iq) 78 | v(j,ip)=g-s*(h+g*tau) 79 | v(j,iq)=h+s*(g-h*tau) 80 | 19 continue 81 | nrot=nrot+1 82 | endif 83 | 21 continue 84 | 22 continue 85 | do 23 ip=1,n 86 | b(ip)=b(ip)+z(ip) 87 | d(ip)=b(ip) 88 | z(ip)=0. 89 | 23 continue 90 | 24 continue 91 | call newpause('too many iterations in jacobi') 92 | return 93 | END 94 | -------------------------------------------------------------------------------- /scisola_tools/ISOLA15/invert/jacobinr.inc: -------------------------------------------------------------------------------- 1 | c********************************************JACOBI Num Rec ************* 2 | 3 | SUBROUTINE JACOBInr(a,n,np,d,v,nrot) 4 | INTEGER n,np,nrot,NMAX 5 | REAL a(np,np),d(np),v(np,np) 6 | PARAMETER (NMAX=500) 7 | INTEGER i,ip,iq,j 8 | REAL c,g,h,s,sm,t,tau,theta,tresh,b(NMAX),z(NMAX) 9 | do 12 ip=1,n 10 | do 11 iq=1,n 11 | v(ip,iq)=0. 12 | 11 continue 13 | v(ip,ip)=1. 14 | 12 continue 15 | do 13 ip=1,n 16 | b(ip)=a(ip,ip) 17 | d(ip)=b(ip) 18 | z(ip)=0. 19 | 13 continue 20 | nrot=0 21 | do 24 i=1,50 22 | sm=0. 23 | do 15 ip=1,n-1 24 | do 14 iq=ip+1,n 25 | sm=sm+abs(a(ip,iq)) 26 | 14 continue 27 | 15 continue 28 | if(sm.eq.0.)return 29 | if(i.lt.4)then 30 | tresh=0.2*sm/n**2 31 | else 32 | tresh=0. 33 | endif 34 | do 22 ip=1,n-1 35 | do 21 iq=ip+1,n 36 | g=100.*abs(a(ip,iq)) 37 | if((i.gt.4).and.(abs(d(ip))+ 38 | *g.eq.abs(d(ip))).and.(abs(d(iq))+g.eq.abs(d(iq))))then 39 | a(ip,iq)=0. 40 | else if(abs(a(ip,iq)).gt.tresh)then 41 | h=d(iq)-d(ip) 42 | if(abs(h)+g.eq.abs(h))then 43 | t=a(ip,iq)/h 44 | else 45 | theta=0.5*h/a(ip,iq) 46 | t=1./(abs(theta)+sqrt(1.+theta**2)) 47 | if(theta.lt.0.)t=-t 48 | endif 49 | c=1./sqrt(1+t**2) 50 | s=t*c 51 | tau=s/(1.+c) 52 | h=t*a(ip,iq) 53 | z(ip)=z(ip)-h 54 | z(iq)=z(iq)+h 55 | d(ip)=d(ip)-h 56 | d(iq)=d(iq)+h 57 | a(ip,iq)=0. 58 | do 16 j=1,ip-1 59 | g=a(j,ip) 60 | h=a(j,iq) 61 | a(j,ip)=g-s*(h+g*tau) 62 | a(j,iq)=h+s*(g-h*tau) 63 | 16 continue 64 | do 17 j=ip+1,iq-1 65 | g=a(ip,j) 66 | h=a(j,iq) 67 | a(ip,j)=g-s*(h+g*tau) 68 | a(j,iq)=h+s*(g-h*tau) 69 | 17 continue 70 | do 18 j=iq+1,n 71 | g=a(ip,j) 72 | h=a(iq,j) 73 | a(ip,j)=g-s*(h+g*tau) 74 | a(iq,j)=h+s*(g-h*tau) 75 | 18 continue 76 | do 19 j=1,n 77 | g=v(j,ip) 78 | h=v(j,iq) 79 | v(j,ip)=g-s*(h+g*tau) 80 | v(j,iq)=h+s*(g-h*tau) 81 | 19 continue 82 | nrot=nrot+1 83 | endif 84 | 21 continue 85 | 22 continue 86 | do 23 ip=1,n 87 | b(ip)=b(ip)+z(ip) 88 | d(ip)=b(ip) 89 | z(ip)=0. 90 | 23 continue 91 | 24 continue 92 | call newpause('too many iterations in jacobi') 93 | return 94 | END 95 | -------------------------------------------------------------------------------- /scisola_tools/examples/example.py: -------------------------------------------------------------------------------- 1 | #Copyright (C) 2014 Triantafyllis Nikolaos 2 | # 3 | #This file is part of Scisola. 4 | # 5 | # Scisola is free software: you can redistribute it and/or modify 6 | # it under the terms of the GNU General Public License as published by 7 | # the Free Software Foundation, either version 2 of the License, or 8 | # (at your option) any later version. 9 | # 10 | # Scisola is distributed in the hope that it will be useful, 11 | # but WITHOUT ANY WARRANTY; without even the implied warranty of 12 | # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 13 | # GNU General Public License for more details. 14 | # 15 | # You should have received a copy of the GNU General Public License 16 | # along with Scisola. If not, see . 17 | 18 | 19 | #!/usr/bin/env python 20 | 21 | import sys 22 | sys.dont_write_bytecode = True 23 | 24 | # append the folder of scisola to python path 25 | sys.path.append("scisola-master/scisola") 26 | 27 | # import the necessary scisola modules 28 | import src.lib.origin as origin 29 | import src.lib.database as database 30 | import src.lib.settings as settings 31 | import src.lib.process as process 32 | 33 | # creates an Origin object 34 | # fill with the desired values 35 | # the attributes of the Origin object can be found at (scisola/src/lib/origin.py) 36 | orig = origin.Origin() 37 | orig.datetime = "2014/11/08 09:21:41.00" 38 | orig.magnitude = round(3.9,1) # must be no more than 1 decimals 39 | orig.longitude = 21.747 40 | orig.latitude = 38.3568 41 | orig.depth = int(7) # must be integer 42 | orig.event_id = "test" # the id provided by seiscomp3 or anything you want 43 | 44 | 45 | # creates a Database object 46 | # fill with the desired values 47 | # the attributes of the Database object can be found at (scisola/src/lib/database.py) 48 | db = database.Database() 49 | db.password = "password" 50 | 51 | # creates a Settings object 52 | sett = settings.Settings() 53 | # retrieves configuration from database 54 | sett = db.loadSettings(sett) 55 | 56 | # by-passing database values by filling desired variables 57 | # the attributes of the Settings object can be found at (scisola/src/lib/settings.py) 58 | # e.g. 59 | # setting different crustal model than the one provided by the database 60 | #sett.crustal_model_path = '/home/user/mycrustal.dat' (example) 61 | 62 | # setting different results folder than the one provided by the database 63 | #sett.output_dir = '/home/user/myoutput' (example) 64 | 65 | # creates a Process Object for calculating 66 | # fill with the desired values 67 | # the attributes of the Process object can be found at (scisola/src/lib/process.py) 68 | # if for example provide a station_list, it calculates a revise procedure, if however station_list is empty, it calculates an automatic procedure. By default, is empty 69 | # if for example save2DB is False, it won't store the results to scisola database 70 | # check (scisola/src/lib/process.py) for more info and options 71 | p = process.Process(origin=orig, settings=sett, db_scisola=db, save2DB=True, delay=0) 72 | # starting MT calculation 73 | p.start() 74 | 75 | 76 | # run from terminal: python example.py 77 | 78 | -------------------------------------------------------------------------------- /scisola/src/lib/origin.py: -------------------------------------------------------------------------------- 1 | #Copyright (C) 2014 Triantafyllis Nikolaos 2 | # 3 | #This file is part of Scisola. 4 | # 5 | # Scisola is free software: you can redistribute it and/or modify 6 | # it under the terms of the GNU General Public License as published by 7 | # the Free Software Foundation, either version 2 of the License, or 8 | # (at your option) any later version. 9 | # 10 | # Scisola is distributed in the hope that it will be useful, 11 | # but WITHOUT ANY WARRANTY; without even the implied warranty of 12 | # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 13 | # GNU General Public License for more details. 14 | # 15 | # You should have received a copy of the GNU General Public License 16 | # along with Scisola. If not, see . 17 | 18 | 19 | #!/usr/bin/env python 20 | 21 | import sys 22 | sys.dont_write_bytecode = True 23 | 24 | 25 | ############################################################################## 26 | # DEFINE CLASS "Origin" # 27 | ############################################################################## 28 | 29 | class Origin: 30 | 31 | def __init__(self): 32 | self.id = None 33 | self.timestamp = None 34 | self.datetime = None 35 | self.description = None 36 | self.magnitude = None 37 | self.latitude = None 38 | self.longitude = None 39 | self.depth = None 40 | self.automatic = True # automatic or revised (True/False) 41 | self.results_dir = None # folder with scisola origin's data 42 | self.event_id = None 43 | self.mt = None # Moment_Tensor object 44 | 45 | 46 | ############################################################################## 47 | # DEFINE CLASS "Moment_Tensor" # 48 | ############################################################################## 49 | 50 | class MomentTensor: 51 | 52 | def __init__(self): 53 | self.cent_shift = None 54 | self.cent_time = None 55 | self.cent_latitude = None 56 | self.cent_longitude = None 57 | self.cent_depth = None 58 | self.correlation = None 59 | self.var_reduction = None 60 | self.mw = None 61 | self.mrr = None 62 | self.mtt = None 63 | self.mpp = None 64 | self.mrt = None 65 | self.mrp = None 66 | self.mtp = None 67 | self.vol = None 68 | self.dc = None 69 | self.clvd = None 70 | self.mo = None 71 | self.strike = None 72 | self.dip = None 73 | self.rake = None 74 | self.strike2 = None 75 | self.dip2 = None 76 | self.rake2 = None 77 | self.p_azm = None 78 | self.p_plunge = None 79 | self.t_azm = None 80 | self.t_plunge = None 81 | self.b_azm = None 82 | self.b_plunge = None 83 | self.minSV = None 84 | self.maxSV = None 85 | self.CN = None 86 | self.stVar = None 87 | self.fmVar = None 88 | self.frequency_1 = None 89 | self.frequency_2 = None 90 | self.frequency_3 = None 91 | self.frequency_4 = None 92 | 93 | -------------------------------------------------------------------------------- /scisola/src/search.py: -------------------------------------------------------------------------------- 1 | #Copyright (C) 2014 Triantafyllis Nikolaos 2 | # 3 | #This file is part of Scisola. 4 | # 5 | # Scisola is free software: you can redistribute it and/or modify 6 | # it under the terms of the GNU General Public License as published by 7 | # the Free Software Foundation, either version 2 of the License, or 8 | # (at your option) any later version. 9 | # 10 | # Scisola is distributed in the hope that it will be useful, 11 | # but WITHOUT ANY WARRANTY; without even the implied warranty of 12 | # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 13 | # GNU General Public License for more details. 14 | # 15 | # You should have received a copy of the GNU General Public License 16 | # along with Scisola. If not, see . 17 | 18 | 19 | #!/usr/bin/env python 20 | 21 | import sys 22 | sys.dont_write_bytecode = True 23 | 24 | from PyQt4 import QtCore, QtGui 25 | 26 | import lib.gui.search 27 | import main 28 | 29 | 30 | class SearchWindow(QtGui.QDialog, lib.gui.search.Ui_Dialog): 31 | def __init__(self, parent=None): 32 | super(SearchWindow, self).__init__(parent) 33 | # inherited from Ui_Dialog 34 | self.setupUi(self) 35 | self.parent = parent 36 | try: 37 | self.dateTimeEdit.setDateTime(QtCore.QDateTime.currentDateTimeUtc()) 38 | self.dateTimeEdit_2.setDateTime(QtCore.QDateTime.currentDateTimeUtc()) 39 | 40 | self.setFunctionality() 41 | self.main() 42 | except: 43 | self.parent.master_log.info("Error in search.py\n" + \ 44 | str(sys.exc_info())) 45 | 46 | 47 | def main(self): 48 | 49 | # center window 50 | frame = self.frameGeometry() 51 | frame.moveCenter(QtGui.QDesktopWidget().availableGeometry().center()) 52 | self.move(frame.topLeft()) 53 | 54 | 55 | def setFunctionality(self): 56 | self.pushButton.clicked.connect(self.pushButtonClicked) 57 | 58 | 59 | def pushButtonClicked(self): 60 | try: 61 | _headers = ['datetime', 'latitude', 'longitude', 62 | 'depth', 'mw', 'mo', 'type', 'id'] 63 | 64 | _start_date = self.dateTimeEdit.date().toString("yyyy/MM/dd") 65 | _start_time = self.dateTimeEdit.time().toString("hh:mm:ss.zzz") 66 | 67 | _end_date = self.dateTimeEdit_2.date().toString("yyyy/MM/dd") 68 | _end_time = self.dateTimeEdit_2.time().toString("hh:mm:ss.zzz") 69 | 70 | _start_datetime = _start_date + " " + _start_time 71 | _end_datetime = _end_date + " " + _end_time 72 | 73 | 74 | _origins = self.parent.db_scisola.loadOrigins(_start_datetime, 75 | _end_datetime) 76 | 77 | _model = main.OriginsTableModel(_origins, _headers, 78 | self.parent.tableView) 79 | self.parent.tableView.setModel(_model) 80 | self.parent.tableView.horizontalHeader().setResizeMode( 81 | QtGui.QHeaderView.Stretch) 82 | 83 | self.accept() 84 | except: 85 | self.parent.master_log.info("Error in search.py\n" + \ 86 | str(sys.exc_info())) 87 | 88 | -------------------------------------------------------------------------------- /scisola/src/lib/settings.py: -------------------------------------------------------------------------------- 1 | #Copyright (C) 2014 Triantafyllis Nikolaos 2 | # 3 | #This file is part of Scisola. 4 | # 5 | # Scisola is free software: you can redistribute it and/or modify 6 | # it under the terms of the GNU General Public License as published by 7 | # the Free Software Foundation, either version 2 of the License, or 8 | # (at your option) any later version. 9 | # 10 | # Scisola is distributed in the hope that it will be useful, 11 | # but WITHOUT ANY WARRANTY; without even the implied warranty of 12 | # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 13 | # GNU General Public License for more details. 14 | # 15 | # You should have received a copy of the GNU General Public License 16 | # along with Scisola. If not, see . 17 | 18 | 19 | #!/usr/bin/env python 20 | 21 | import sys 22 | sys.dont_write_bytecode = True 23 | 24 | 25 | ############################################################################## 26 | # DEFINE CLASS "Settings" # 27 | ############################################################################## 28 | 29 | class Settings: 30 | """ 31 | The configuration parameters in order to work scisola 32 | """ 33 | 34 | def __init__(self): 35 | # unique id for configuration 36 | self.id = None 37 | # time when settings applied 38 | self.timestamp = None 39 | # location threshold 40 | self.center_latitude = None 41 | self.center_longitude = None 42 | # distance range in km 43 | self.distance_range = None 44 | # magnitude threshold 45 | self.magnitude_threshold = None 46 | # minimum number of sectors in order to run process 47 | self.min_sectors = None 48 | # max number of selected stations per sector 49 | self.stations_per_sector = None 50 | # max number of possible centroid sources 51 | self.sources = None 52 | # step per next centroid source in km 53 | self.source_step = None 54 | # stations above clipping threshold are removed from process 55 | self.clipping_threshold = None 56 | # time grid search 57 | self.time_grid_start = None 58 | self.time_grid_step = None 59 | self.time_grid_end = None 60 | # every interval to watch for new events in sec 61 | self.watch_interval = None 62 | # delay in sec before process start 63 | # (it might need for seedlink ring buffers to save data) 64 | self.process_delay = None 65 | # fatal timeout in sec 66 | # (in case of a problematic loop in process) 67 | self.process_timeout = None 68 | # crustal model file 69 | self.crustal_model_path = None 70 | # results folder (all processes save result files here) 71 | self.output_dir = None 72 | # path to ISOLA program 73 | # (gr_xyz, elemse, isola12c, norm12c, dsretc, kagan) 74 | self.isola_path = None 75 | # path to SeisComP3 program 76 | self.sc3_path = None 77 | self.sc3_scevtls = None 78 | self.sc3_scxmldump = None 79 | # path to seedlink 80 | self.seedlink_path = None 81 | self.seedlink_host = None 82 | self.seedlink_port = None 83 | # list with all possible distance selections 84 | self.distance_selection = [] 85 | # list with all possible inversion time 86 | self.inversion_time = [] 87 | # list with all possible inversion frequency 88 | self.inversion_frequency = [] 89 | 90 | -------------------------------------------------------------------------------- /scisola_tools/ISOLA/invert/filter.inc: -------------------------------------------------------------------------------- 1 | subroutine filter(f1,f2,f3,f4,timstep,a) 2 | 3 | COMPLEX S(8192) 4 | complex ai 5 | DIMENSION A(8192) 6 | COMMON/COM/FLE,FLI,FRI,FRE,DF,ILS,IRS,NT,NTM 7 | 8 | 9 | NI=13 ! now fixed !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! 10 | 11 | 12 | fle=f1 13 | fli=f2 14 | fri=f3 15 | fre=f4 16 | dt=timstep 17 | 18 | 19 | ai=cmplx(0.,1.) 20 | PI=3.141592 21 | 22 | NT=2**NI 23 | NP=NT 24 | NT2=NT/2 25 | NTM=NT2+1 26 | NTT=NT+2 27 | DF=1./(DT*FLOAT(NT)) 28 | FMAX=FLOAT(NTM)*DF 29 | c 30 | ILS=FLE/DF+1.1 31 | IRS=FRE/DF+1.1 32 | IF(ILS.GE.NTM)THEN 33 | WRITE(*,*) 'wrong left window edge, set to f=0' 34 | ILS=1 35 | FLE=0. 36 | FLI=DF 37 | ENDIF 38 | IF(IRS.GT.NTM)THEN 39 | WRITE(*,*) 'wrong right window edge, set to f=fmax' 40 | IRS=NTM 41 | FRE=(IRS-1)*DF 42 | FRI=FRE-1 43 | ENDIF 44 | NFW=IRS-ILS+1 45 | C 46 | c ****************************************************** 47 | c 48 | 49 | c 50 | C DIRECT FOURIER TRANSFORM 51 | C 52 | DO I=1,NP 53 | S(I)=CMPLX(A(I),.0) 54 | enddo 55 | IF(NT.EQ.NP)GO TO 32 56 | NP1=NP+1 57 | DO I=NP1,NT 58 | S(I)=CMPLX(.0,.0) 59 | enddo 60 | 32 continue 61 | 62 | c ncut=ifix(50./dt) *2 !!!!! shift 50 sec x 2 !!!!!!!! FIX 63 | c do i=NP-ncut,np ! 50 sec needed because of the shift below 64 | c s(i)=cmplx(0.,0.) 65 | c enddo 66 | c this cut is important due to artificial shift of 50 sec 67 | c we cut the last 2x 50 sec: 50 sec beyond end of time window 68 | c (to prevent alias coming from the shift) 69 | c and 50 sec before end of time window 70 | c (to prevent alias coming from fitering) 71 | c 72 | c if needed it can be reduced, e.g. to 30 sec, or 20 sec 73 | c (as the artificial shift below) 74 | c CAUTION: in some cases, e,g, shallow source depth, when synthetics 75 | c have a small trend or problems due to aw, cut produces jump which 76 | c is then seen not only 100 (or 100-50) sec before end, but also at 77 | c t=0 (later shifted to 1st subsource origin time) 78 | 79 | 80 | CALL FCOOLR(NI,S,-1.) 81 | 82 | 83 | ! ATTENTION artificial time shift 50 sec 84 | DO I=2,NTM 85 | frr=float(i-1)*df 86 | S(I)=S(I)*EXP(-2.*pi*ai*frr*50.) 87 | enddo 88 | c the shift is very important to prevent problems due to filtering 89 | c filtering lenghtens the seismo before origin time and everything 90 | c before origin time is lost 91 | c (this results in abrupt cut at t=0, later seen at the source time of 1st subsource) 92 | c however, shift must be done carefully: signal should not beyond time window to the right 93 | c also remember that once we produce elemse, this is later 94 | c shifted (according the subevent source time) in time domain, so that 95 | c everything outside time window is lost=zeroed 96 | 97 | ! from velocity to DISPLACEMENT 98 | DO I=2,NTM 99 | frr=float(i-1)*df 100 | S(I)=S(I)/(2.*pi*ai*frr) 101 | enddo 102 | 103 | 104 | CALL FW(S) 105 | 106 | C 107 | C INVERSE FOURIER TRANSFORM 108 | C 109 | DO I=2,NT2 110 | J=NTT-I 111 | S(J)=CONJG(S(I)) 112 | enddo 113 | CALL FCOOLR(NI,S,+1.) 114 | C 115 | C OUTPUT OF FILTERED TIME SERIES 116 | C 117 | 118 | DO I=1,NP 119 | a(i)=REAL(S(I))/FLOAT(NT) ! constant dt*df=1/N 120 | ENDDO 121 | 122 | RETURN 123 | END 124 | 125 | -------------------------------------------------------------------------------- /scisola_tools/ISOLA/invert/elecas.inc: -------------------------------------------------------------------------------- 1 | subroutine elecas(filename,aopt,ishf,seismo) 2 | 3 | c aopt ... moment tensor 4 | c w ... uz nejsou elem seis ale kompletni seismogram pro 1 pozici zdroje, s 1 MT a s BASIC SHIFT ISHF 5 | c (= sloupce matice G) 6 | c all (12) particular shifts will be made in main !!!!!! 7 | 8 | 9 | 10 | dimension aopt(6) 11 | 12 | character*12 filename 13 | dimension seismo(-1000:8192,21,3) 14 | dimension s(-2000:8192,21,3) ! pomocne pole ????????????? bude stacit posun 2000dt???????? 15 | dimension es(8192,21,3,6) ! elemse; 6= pocet acek 16 | 17 | dimension ntm(21) 18 | dimension weig(21,3) 19 | logical stat(21) 20 | 21 | 22 | common /NUMBERS/ nr,ntim,nmom,isubmax,ifirst,istep,ilast, 23 | * f1,f2,f3,f4,dt 24 | 25 | common /ST/ stat,ntm 26 | common /WEI/ weig 27 | 28 | 29 | open(100,form='unformatted',file=filename) ! elementary seismograms from ELEMSE (input) 30 | 31 | c 32 | c READING 6 ELEMENTARY velocity SEISMOGRAMS, a single point source 33 | c (synth. Green's convolved with SOME time fctn.; see ELEMSE.FOR) 34 | c Caution! The time function used in elemse.for must be triangle and its duration must be known !!!!!!!! 35 | c 36 | 37 | do ir=1,nr 38 | do it=1,6 ! .... MT components 39 | do itim=1,ntim 40 | read(100) time, 41 | * es(itim,ir,1,it),es(itim,ir,2,it),es(itim,ir,3,it) 42 | enddo 43 | enddo 44 | enddo 45 | 46 | REWIND(100) 47 | close (100) 48 | 49 | 50 | do ir=1,nr !!!!! from elem seismo to complete seismo 51 | do itim = 1,ntim 52 | s(itim,ir,1)=0. ! s = suma (aopt(it) . es(...,it)), soucet pres it=1,6 (MT) 53 | s(itim,ir,2)=0. 54 | s(itim,ir,3)=0. 55 | do it=1,6 ! it here numbering of MT components 56 | s(itim,ir,1)= s(itim,ir,1) + es(itim,ir,1,it) * aopt(it) 57 | s(itim,ir,2)= s(itim,ir,2) + es(itim,ir,2,it) * aopt(it) 58 | s(itim,ir,3)= s(itim,ir,3) + es(itim,ir,3,it) * aopt(it) 59 | enddo 60 | enddo 61 | enddo 62 | 63 | if(ishf.gt.2000) then 64 | write(*,*) 'problem dimension 2 (subr. elecas)' 65 | write(222,*) 'problem dimension 2 (subr. elecas)' 66 | stop 67 | endif 68 | 69 | 70 | do ir=1,nr 71 | do itim=1,ntim 72 | c ishf basic shift v poctu cas kroku 73 | seismo(itim,ir,1)= s(itim-ishf,ir,1) 74 | seismo(itim,ir,2)= s(itim-ishf,ir,2) 75 | seismo(itim,ir,3)= s(itim-ishf,ir,3) 76 | enddo 77 | enddo 78 | 79 | 80 | 81 | c do ir=1,nr ! output of seismo for plotting NO FILTER !!! 82 | c do itim=1,ntim 83 | c time=float(itim-1)*dt 84 | c write(8256,'(4(1x,e12.6))') time, 85 | c * seismo(itim,ir,1),seismo(itim,ir,2),seismo(itim,ir,3) 86 | c enddo 87 | c write(8256,*) '*' 88 | c enddo 89 | 90 | 91 | c 92 | c FILTERING SEISMO (w will inlcude filter, displacement,, shift) 93 | c 94 | 95 | do ir=1,nr 96 | do icom=1,3 97 | call filter(f1,f2,f3,f4,dt, seismo(1,ir,icom) ) ! ??????????????? needs testing !!!!!!!!!!!!!!!!! s???????? 98 | enddo 99 | enddo 100 | 101 | 102 | c do ir=1,nr !!! output of seismo for plotting WITH FILTER = filter + integ. to displ. + shift ! 103 | c do itim=1,ntim 104 | c time=float(itim-1)*dt 105 | c write(8256,'(4(1x,e12.6))') time, 106 | c * seismo(itim,ir,1),seismo(itim,ir,2),seismo(itim,ir,3) 107 | c enddo 108 | c write(8256,*) '*' 109 | c enddo 110 | 111 | 112 | 113 | 114 | RETURN 115 | END 116 | 117 | -------------------------------------------------------------------------------- /scisola_tools/ISOLA/invert/elecas_12c.inc: -------------------------------------------------------------------------------- 1 | subroutine elecas_12c(filename,aopt,ishf,seismo) 2 | 3 | c aopt ... moment tensor 4 | c w ... uz nejsou elem seis ale kompletni seismogram pro 1 pozici zdroje, s 1 MT a s BASIC SHIFT ISHF 5 | c (= sloupce matice G) 6 | c all (12) particular shifts will be made in main !!!!!! 7 | 8 | 9 | 10 | dimension aopt(6) 11 | 12 | character*12 filename 13 | dimension seismo(-1000:8192,21,3) 14 | dimension s(-2000:8192,21,3) ! pomocne pole ????????????? bude stacit posun 2000dt???????? 15 | dimension es(8192,21,3,6) ! elemse; 6= pocet acek 16 | 17 | dimension ntm(21) 18 | dimension weig(21,3) 19 | logical stat(21) 20 | 21 | 22 | common /NUMBERS/ nr,ntim,nmom,isubmax,ifirst,istep,ilast, 23 | * ff1(21),ff2(21),ff3(21),ff4(21),dt 24 | 25 | common /ST/ stat,ntm 26 | common /WEI/ weig 27 | 28 | 29 | open(100,form='unformatted',file=filename) ! elementary seismograms from ELEMSE (input) 30 | 31 | c 32 | c READING 6 ELEMENTARY velocity SEISMOGRAMS, a single point source 33 | c (synth. Green's convolved with SOME time fctn.; see ELEMSE.FOR) 34 | c Caution! The time function used in elemse.for must be triangle and its duration must be known !!!!!!!! 35 | c 36 | 37 | do ir=1,nr 38 | do it=1,6 ! .... MT components 39 | do itim=1,ntim 40 | read(100) time, 41 | * es(itim,ir,1,it),es(itim,ir,2,it),es(itim,ir,3,it) 42 | enddo 43 | enddo 44 | enddo 45 | 46 | REWIND(100) 47 | close (100) 48 | 49 | 50 | do ir=1,nr !!!!! from elem seismo to complete seismo 51 | do itim = 1,ntim 52 | s(itim,ir,1)=0. ! s = suma (aopt(it) . es(...,it)), soucet pres it=1,6 (MT) 53 | s(itim,ir,2)=0. 54 | s(itim,ir,3)=0. 55 | do it=1,6 ! it here numbering of MT components 56 | s(itim,ir,1)= s(itim,ir,1) + es(itim,ir,1,it) * aopt(it) 57 | s(itim,ir,2)= s(itim,ir,2) + es(itim,ir,2,it) * aopt(it) 58 | s(itim,ir,3)= s(itim,ir,3) + es(itim,ir,3,it) * aopt(it) 59 | enddo 60 | enddo 61 | enddo 62 | 63 | if(ishf.gt.2000) then 64 | write(*,*) 'problem dimension 2' 65 | write(222,*) 'problem dimension 2' 66 | stop 67 | endif 68 | 69 | 70 | do ir=1,nr 71 | do itim=1,ntim 72 | c ishf basic shift v poctu cas kroku 73 | seismo(itim,ir,1)= s(itim-ishf,ir,1) 74 | seismo(itim,ir,2)= s(itim-ishf,ir,2) 75 | seismo(itim,ir,3)= s(itim-ishf,ir,3) 76 | enddo 77 | enddo 78 | 79 | 80 | 81 | c do ir=1,nr ! output of seismo for plotting NO FILTER !!! 82 | c do itim=1,ntim 83 | c time=float(itim-1)*dt 84 | c write(8256,'(4(1x,e12.6))') time, 85 | c * seismo(itim,ir,1),seismo(itim,ir,2),seismo(itim,ir,3) 86 | c enddo 87 | c write(8256,*) '*' 88 | c enddo 89 | 90 | 91 | c 92 | c FILTERING SEISMO (w will inlcude filter, displacement,, shift) 93 | c 94 | 95 | do ir=1,nr 96 | f1=ff1(ir) 97 | f2=ff2(ir) 98 | f3=ff3(ir) 99 | f4=ff4(ir) 100 | do icom=1,3 101 | call filter(f1,f2,f3,f4,dt, seismo(1,ir,icom) ) 102 | enddo 103 | enddo 104 | 105 | 106 | c do ir=1,nr !!! output of seismo for plotting WITH FILTER = filter + integ. to displ. + shift ! 107 | c do itim=1,ntim 108 | c time=float(itim-1)*dt 109 | c write(8256,'(4(1x,e12.6))') time, 110 | c * seismo(itim,ir,1),seismo(itim,ir,2),seismo(itim,ir,3) 111 | c enddo 112 | c write(8256,*) '*' 113 | c enddo 114 | 115 | 116 | 117 | 118 | RETURN 119 | END 120 | 121 | -------------------------------------------------------------------------------- /scisola/src/lib/gui/stations.py: -------------------------------------------------------------------------------- 1 | # -*- coding: utf-8 -*- 2 | 3 | # Form implementation generated from reading ui file 'stations.ui' 4 | # 5 | # Created: Tue Jul 29 00:46:47 2014 6 | # by: PyQt4 UI code generator 4.10 7 | # 8 | # WARNING! All changes made in this file will be lost! 9 | 10 | from PyQt4 import QtCore, QtGui 11 | 12 | try: 13 | _fromUtf8 = QtCore.QString.fromUtf8 14 | except AttributeError: 15 | def _fromUtf8(s): 16 | return s 17 | 18 | try: 19 | _encoding = QtGui.QApplication.UnicodeUTF8 20 | def _translate(context, text, disambig): 21 | return QtGui.QApplication.translate(context, text, disambig, _encoding) 22 | except AttributeError: 23 | def _translate(context, text, disambig): 24 | return QtGui.QApplication.translate(context, text, disambig) 25 | 26 | class Ui_MainWindow(object): 27 | def setupUi(self, MainWindow): 28 | MainWindow.setObjectName(_fromUtf8("MainWindow")) 29 | MainWindow.resize(800, 600) 30 | icon = QtGui.QIcon() 31 | icon.addPixmap(QtGui.QPixmap(_fromUtf8(":/logo/beachball.png")), QtGui.QIcon.Normal, QtGui.QIcon.Off) 32 | MainWindow.setWindowIcon(icon) 33 | self.centralwidget = QtGui.QWidget(MainWindow) 34 | self.centralwidget.setObjectName(_fromUtf8("centralwidget")) 35 | self.verticalLayout_2 = QtGui.QVBoxLayout(self.centralwidget) 36 | self.verticalLayout_2.setObjectName(_fromUtf8("verticalLayout_2")) 37 | self.verticalLayout = QtGui.QVBoxLayout() 38 | self.verticalLayout.setObjectName(_fromUtf8("verticalLayout")) 39 | self.scrollArea = QtGui.QScrollArea(self.centralwidget) 40 | self.scrollArea.setWidgetResizable(True) 41 | self.scrollArea.setObjectName(_fromUtf8("scrollArea")) 42 | self.scrollAreaWidgetContents = QtGui.QWidget() 43 | self.scrollAreaWidgetContents.setGeometry(QtCore.QRect(0, 0, 778, 531)) 44 | self.scrollAreaWidgetContents.setObjectName(_fromUtf8("scrollAreaWidgetContents")) 45 | self.verticalLayout_3 = QtGui.QVBoxLayout(self.scrollAreaWidgetContents) 46 | self.verticalLayout_3.setObjectName(_fromUtf8("verticalLayout_3")) 47 | self.tableView = QtGui.QTableView(self.scrollAreaWidgetContents) 48 | self.tableView.setSortingEnabled(True) 49 | self.tableView.setObjectName(_fromUtf8("tableView")) 50 | self.verticalLayout_3.addWidget(self.tableView) 51 | self.horizontalLayout_2 = QtGui.QHBoxLayout() 52 | self.horizontalLayout_2.setObjectName(_fromUtf8("horizontalLayout_2")) 53 | self.pushButton = QtGui.QPushButton(self.scrollAreaWidgetContents) 54 | icon1 = QtGui.QIcon() 55 | icon1.addPixmap(QtGui.QPixmap(_fromUtf8(":/icons/start.png")), QtGui.QIcon.Normal, QtGui.QIcon.Off) 56 | self.pushButton.setIcon(icon1) 57 | self.pushButton.setObjectName(_fromUtf8("pushButton")) 58 | self.horizontalLayout_2.addWidget(self.pushButton) 59 | self.verticalLayout_3.addLayout(self.horizontalLayout_2) 60 | self.scrollArea.setWidget(self.scrollAreaWidgetContents) 61 | self.verticalLayout.addWidget(self.scrollArea) 62 | self.verticalLayout_2.addLayout(self.verticalLayout) 63 | MainWindow.setCentralWidget(self.centralwidget) 64 | self.menubar = QtGui.QMenuBar(MainWindow) 65 | self.menubar.setGeometry(QtCore.QRect(0, 0, 800, 25)) 66 | self.menubar.setObjectName(_fromUtf8("menubar")) 67 | MainWindow.setMenuBar(self.menubar) 68 | self.statusbar = QtGui.QStatusBar(MainWindow) 69 | self.statusbar.setObjectName(_fromUtf8("statusbar")) 70 | MainWindow.setStatusBar(self.statusbar) 71 | 72 | self.retranslateUi(MainWindow) 73 | QtCore.QMetaObject.connectSlotsByName(MainWindow) 74 | 75 | def retranslateUi(self, MainWindow): 76 | MainWindow.setWindowTitle(_translate("MainWindow", "stations", None)) 77 | self.pushButton.setText(_translate("MainWindow", "apply", None)) 78 | 79 | import icons_rc 80 | -------------------------------------------------------------------------------- /scisola_tools/ISOLA17/invert/manidata15.inc: -------------------------------------------------------------------------------- 1 | 2 | subroutine manidata15(keygps,x,rr) 3 | 4 | c Manipulating the data. Input data x, output data also x (re-written). 5 | c Power of the data rr. 6 | 7 | dimension x(8192,21,3) 8 | dimension weig(21,3) !!!!!! NEW Sep 9, 2015 9 | dimension ntm(21),keygps(21) 10 | logical stat(21) 11 | 12 | common /WEI/ weig !!!!!! NEW Sep 9, 2015 13 | 14 | 15 | c CHARACTER *5 statname(21) 16 | c character *17 statfil1,statfil2,statfil3 !!g77 17 | 18 | 19 | common /NUMBERS/ nr,ntim,nmom,isubmax,ifirst,istep,ilast, 20 | * ff1(21),ff2(21),ff3(21),ff4(21),dt 21 | 22 | common /ST/ stat,ntm 23 | 24 | c ******************************************************************* 25 | c *************MANIPULATING OBSERVED DATA**************************** 26 | c ******************************************************************* 27 | 28 | do ir=1,nr 29 | do itim=1,ntim 30 | x(itim,ir,1)=0. 31 | x(itim,ir,2)=0. 32 | x(itim,ir,3)=0. 33 | enddo 34 | enddo 35 | 36 | c 37 | c READING velocity SEISMOGRAMS TO BE INVERTED (=DATA) 38 | c 39 | 40 | do ir=1,nr 41 | nfile=1000+1*ir 42 | c statfil1=trim(statname(ir))//'raw.dat' 43 | c open(nfile,file=statfil1) 44 | do itim=1,ntim 45 | read(nfile,*) time, 46 | * x(itim,ir,1),x(itim,ir,2),x(itim,ir,3) 47 | enddo 48 | c close(nfile) 49 | enddo 50 | 51 | 52 | 53 | 54 | c 55 | c FILTERING THE DATA - OLD !!! 56 | c 57 | c do ir=1,nr 58 | c do icom=1,3 59 | c call filter(f1,f2,f3,f4,dt,x(1,ir,icom)) 60 | c enddo 61 | c enddo 62 | 63 | 64 | 65 | 66 | c 67 | c FILTERING THE DATA 68 | c GPS data supposed to be in ***raw as shifted by 50s, LF displacement 69 | c 70 | 71 | 72 | do ir=1,nr 73 | if(keyGPS(ir).eq.0) then !!!!!! filter only for SEIS; but suppressed for gps 74 | f1=ff1(ir) !not used for LP!!!! 'filter' involves 50s shift, filtr, integration, stabilizations 75 | f4=ff4(ir) !not used for HP!!!! 76 | keyfil=0 !(BP=0, LP=1, HP=2) ! LP to avoid double suppression of low freq after pre-filtering in GUI 77 | keydis=1 !(vel=0, displ=1) 78 | shift=0. ! shift 50 s is impossible if TL<50s !!!!!!!!! 79 | do icom=1,3 80 | call filter15(keyfil,keydis,shift,f1,f4,dt,x(1,ir,icom)) ! seis. has the OLD filter 81 | c call filter(f1,f2,f3,f4,dt,x(1,ir,icom)) ! seis. has the OLD filter 82 | c call filter_stat(f1,f2,f3,f4,dt,x(1,ir,icom)) ! this is a NEW ('clever') filter to support statics 83 | c CAUTION same option as here (the old filter or new) must be also in elemat2_12c_mix 84 | enddo 85 | endif !!!!!!!!!!!!!!!!!!! 86 | enddo 87 | 88 | 89 | do ir=1,nr ! output of filtered input data 90 | nfile=2000+1*ir 91 | c statfil2=trim(statname(ir))//'fil.dat' 92 | c open(nfile,file=statfil2) 93 | do itim=1,ntim 94 | time=float(itim-1)* dt 95 | write(nfile,'(4(1x,e12.6))') time, 96 | * x(itim,ir,1), x(itim,ir,2), x(itim,ir,3) 97 | enddo 98 | c close(nfile) 99 | enddo 100 | 101 | 102 | c 103 | c COMPUTING 'POWER' OF THE original DATA (the USED stations ONLY !) 104 | c 105 | 106 | rr=0. 107 | do icom=1,3 !icom=seismo comp. 108 | do ir=1,nr ! ir=station 109 | if(stat(ir)) then 110 | do itim=1,ntim ! ntim or 4000! For ACRE can change ntim here to 4000 and in ISOLA15 to get VR 111 | 112 | c rr=rr+x(itim,ir,icom)*x(itim,ir,icom) ! old (no weights) 113 | rr=rr+ (x(itim,ir,icom)*weig(ir,icom))**2 ! new (with weights) 9.9. 2015 114 | 115 | enddo 116 | endif 117 | enddo 118 | enddo 119 | rr=rr*dt 120 | 121 | RETURN 122 | END 123 | -------------------------------------------------------------------------------- /scisola_tools/scisola2http/scisola/style.css: -------------------------------------------------------------------------------- 1 | /* 2 | #Copyright (C) 2015 Triantafyllis Nikolaos 3 | # 4 | #This file is part of Scisola tools. 5 | # 6 | # Scisola is free software: you can redistribute it and/or modify 7 | # it under the terms of the GNU General Public License as published by 8 | # the Free Software Foundation, either version 2 of the License, or 9 | # (at your option) any later version. 10 | # 11 | # Scisola is distributed in the hope that it will be useful, 12 | # but WITHOUT ANY WARRANTY; without even the implied warranty of 13 | # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 14 | # GNU General Public License for more details. 15 | # 16 | # You should have received a copy of the GNU General Public License 17 | # along with Scisola. If not, see . 18 | 19 | Basic Template: 20 | Design by Bryant Smith 21 | http://www.bryantsmith.com 22 | http://www.aszx.net 23 | email: templates [-at-] bryantsmith [-dot-] com 24 | */ 25 | 26 | html, body { 27 | text-align: center; 28 | } 29 | p {text-align: left;} 30 | 31 | 32 | 33 | body { 34 | margin: 0; 35 | padding: 0; 36 | background: #697281; 37 | text-align: left; 38 | /* font-family: "Trebuchet MS", Arial, Helvetica, sans-serif; */ 39 | font-size: 14px; 40 | color: #F1F5F8; 41 | background-color:#277E56; 42 | } 43 | * 44 | { 45 | margin: 0 auto 0 auto; 46 | text-align:left;} 47 | 48 | 49 | #page 50 | { 51 | margin: 0 auto 0 auto; 52 | margin-top:25px; 53 | display: block; 54 | height:auto; 55 | position: relative; 56 | overflow: hidden; 57 | background: url(images/background.png) repeat-y; 58 | width: 1000px; 59 | } 60 | 61 | #header 62 | { 63 | background-image:url(images/header.png); 64 | background-repeat:no-repeat; 65 | height:111px; 66 | width:1000px; 67 | } 68 | 69 | #header h1 70 | { 71 | position:relative; 72 | left:30px; 73 | top:25px; 74 | color:#F6F6F6; 75 | text-align:left; 76 | font-size:40px; 77 | font-weight:bold; 78 | font-family:Arial, Helvetica, sans-serif; 79 | } 80 | 81 | #header h2 82 | { 83 | position:relative; 84 | left:33px; 85 | top:21px; 86 | color:#C0C0C0; 87 | text-align:left; 88 | font-size:17px; 89 | font-weight:bold; 90 | font-family:Arial, Helvetica, sans-serif; 91 | } 92 | 93 | 94 | #bar 95 | { 96 | background-image:url(images/bar.png); 97 | background-repeat:no-repeat; 98 | height:55px; 99 | width:1000px; 100 | line-height:55px; 101 | padding-left:20px; 102 | padding-right:20px; 103 | } 104 | 105 | #bar .link 106 | { 107 | float:left; 108 | height:55px; 109 | } 110 | 111 | #bar .link:hover 112 | { 113 | background-image:url(images/linkrollover.png); 114 | background-repeat:no-repeat; 115 | background-position:center; 116 | 117 | 118 | } 119 | 120 | 121 | #bar a 122 | { 123 | font-size:14px; 124 | font-weight:bold; 125 | color:#FBFDFB; 126 | margin-left:27px; 127 | margin-right:27px; 128 | 129 | } 130 | 131 | #bar a:hover 132 | { 133 | color:#999999; 134 | } 135 | 136 | 137 | 138 | 139 | .contentTitle h1 140 | { 141 | margin-left:10px; 142 | padding-top:8px; 143 | font-size:20px; 144 | font-weight:bold; 145 | color:#071027; 146 | } 147 | 148 | 149 | .contentText 150 | { 151 | width:938px; 152 | margin-top:10px; 153 | padding-left:25px; 154 | padding-right:25px; 155 | font-size:13px; 156 | color:#030712; 157 | line-height:20px; 158 | letter-spacing:0px; 159 | } 160 | 161 | a 162 | { 163 | text-decoration:none; 164 | color:#000000; 165 | border-bottom:1px dashed #2A2A2A; 166 | font-size:13px; 167 | } 168 | 169 | a:hover 170 | { 171 | color:#8F8F8F; 172 | border-bottom:1px dotted #2A2A2A; 173 | } 174 | 175 | 176 | #footer { 177 | width: 1000px; 178 | height:53px; 179 | background: url(images/footer.png) no-repeat; 180 | text-align:center; 181 | font-size:11px; 182 | color:#2A2A2A; 183 | padding-top:25px; 184 | } 185 | 186 | -------------------------------------------------------------------------------- /scisola_tools/ISOLA15/invert/manidata15.inc: -------------------------------------------------------------------------------- 1 | 2 | subroutine manidata15(keygps,x,rr) 3 | 4 | c Manipulating the data. Input data x, output data also x (re-written). 5 | c Power of the data rr. 6 | 7 | dimension x(8192,21,3) 8 | dimension weig(21,3) !!!!!! NEW Sep 9, 2015 9 | dimension ntm(21),keygps(21) 10 | logical stat(21) 11 | 12 | common /WEI/ weig !!!!!! NEW Sep 9, 2015 13 | 14 | 15 | c CHARACTER *5 statname(21) 16 | c character *17 statfil1,statfil2,statfil3 !!g77 17 | 18 | 19 | common /NUMBERS/ nr,ntim,nmom,isubmax,ifirst,istep,ilast, 20 | * ff1(21),ff2(21),ff3(21),ff4(21),dt 21 | 22 | common /ST/ stat,ntm 23 | 24 | c ******************************************************************* 25 | c *************MANIPULATING OBSERVED DATA**************************** 26 | c ******************************************************************* 27 | 28 | do ir=1,nr 29 | do itim=1,ntim 30 | x(itim,ir,1)=0. 31 | x(itim,ir,2)=0. 32 | x(itim,ir,3)=0. 33 | enddo 34 | enddo 35 | 36 | c 37 | c READING velocity SEISMOGRAMS TO BE INVERTED (=DATA) 38 | c 39 | 40 | do ir=1,nr 41 | nfile=1000+1*ir 42 | c statfil1=trim(statname(ir))//'raw.dat' 43 | c open(nfile,file=statfil1) 44 | do itim=1,ntim 45 | read(nfile,*) time, 46 | * x(itim,ir,1),x(itim,ir,2),x(itim,ir,3) 47 | enddo 48 | c close(nfile) 49 | enddo 50 | 51 | 52 | 53 | 54 | c 55 | c FILTERING THE DATA - OLD !!! 56 | c 57 | c do ir=1,nr 58 | c do icom=1,3 59 | c call filter(f1,f2,f3,f4,dt,x(1,ir,icom)) 60 | c enddo 61 | c enddo 62 | 63 | 64 | 65 | 66 | c 67 | c FILTERING THE DATA 68 | c GPS data supposed to be in ***raw as shifted by 50s, LF displacement 69 | c 70 | 71 | 72 | do ir=1,nr 73 | if(keyGPS(ir).eq.0) then !!!!!! filter only for SEIS; but suppressed for gps 74 | f1=ff1(ir) !not used for LP!!!! 'filter' involves 50s shift, filtr, integration, stabilizations 75 | f4=ff4(ir) !not used for HP!!!! 76 | keyfil=0 !(BP=0, LP=1, HP=2) ! LP to avoid double suppression of low freq after pre-filtering in GUI 77 | keydis=1 !(vel=0, displ=1) 78 | shift=0. ! shift 50 s is impossible if TL<50s !!!!!!!!! 79 | do icom=1,3 80 | call filter15(keyfil,keydis,shift,f1,f4,dt,x(1,ir,icom)) ! seis. has the OLD filter 81 | c call filter(f1,f2,f3,f4,dt,x(1,ir,icom)) ! seis. has the OLD filter 82 | c call filter_stat(f1,f2,f3,f4,dt,x(1,ir,icom)) ! this is a NEW ('clever') filter to support statics 83 | c CAUTION same option as here (the old filter or new) must be also in elemat2_12c_mix 84 | enddo 85 | endif !!!!!!!!!!!!!!!!!!! 86 | enddo 87 | 88 | 89 | do ir=1,nr ! output of filtered input data 90 | nfile=2000+1*ir 91 | c statfil2=trim(statname(ir))//'fil.dat' 92 | c open(nfile,file=statfil2) 93 | do itim=1,ntim 94 | time=float(itim-1)* dt 95 | write(nfile,'(4(1x,e12.6))') time, 96 | * x(itim,ir,1), x(itim,ir,2), x(itim,ir,3) 97 | enddo 98 | c close(nfile) 99 | enddo 100 | 101 | 102 | c 103 | c COMPUTING 'POWER' OF THE original DATA (the USED stations ONLY !) 104 | c 105 | 106 | rr=0. 107 | do icom=1,3 !icom=seismo comp. 108 | do ir=1,nr ! ir=station 109 | if(stat(ir)) then 110 | do itim=1,ntim !itim=time 111 | 112 | c rr=rr+x(itim,ir,icom)*x(itim,ir,icom) ! old (no weights) 113 | rr=rr+ (x(itim,ir,icom)*weig(ir,icom))**2 ! new (with weights) 9.9. 2015 114 | 115 | enddo 116 | endif 117 | enddo 118 | enddo 119 | rr=rr*dt 120 | 121 | RETURN 122 | END 123 | 124 | -------------------------------------------------------------------------------- /scisola/src/database.py: -------------------------------------------------------------------------------- 1 | #Copyright (C) 2014 Triantafyllis Nikolaos 2 | # 3 | #This file is part of Scisola. 4 | # 5 | # Scisola is free software: you can redistribute it and/or modify 6 | # it under the terms of the GNU General Public License as published by 7 | # the Free Software Foundation, either version 2 of the License, or 8 | # (at your option) any later version. 9 | # 10 | # Scisola is distributed in the hope that it will be useful, 11 | # but WITHOUT ANY WARRANTY; without even the implied warranty of 12 | # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 13 | # GNU General Public License for more details. 14 | # 15 | # You should have received a copy of the GNU General Public License 16 | # along with Scisola. If not, see . 17 | 18 | 19 | #!/usr/bin/env python 20 | 21 | import sys 22 | sys.dont_write_bytecode = True 23 | 24 | from PyQt4 import QtGui 25 | 26 | import lib.gui.database 27 | 28 | import lib.database 29 | 30 | class DBWindow(QtGui.QDialog, lib.gui.database.Ui_Dialog): 31 | def __init__(self, parent=None): 32 | super(DBWindow, self).__init__(parent) 33 | # inherited from Ui_Dialog 34 | self.setupUi(self) 35 | 36 | self.db_scisola = None 37 | self.db_sc3 = None 38 | 39 | self.setFunctionality() 40 | self.main() 41 | 42 | 43 | def main(self): 44 | 45 | # center window 46 | frame = self.frameGeometry() 47 | frame.moveCenter(QtGui.QDesktopWidget().availableGeometry().center()) 48 | self.move(frame.topLeft()) 49 | 50 | 51 | def setFunctionality(self): 52 | 53 | self.comboBox.currentIndexChanged.connect(self.comboBoxChanged) 54 | self.comboBox_2.currentIndexChanged.connect(self.comboBoxChanged_2) 55 | self.pushButton.clicked.connect(self.pushButtonClicked) 56 | 57 | 58 | def comboBoxChanged(self): 59 | 60 | # if PostgreSQL 61 | if self.comboBox.currentIndex() == 1: 62 | self.lineEdit.setText("postgres") 63 | self.lineEdit_2.setText("postgres") 64 | self.lineEdit_4.setText("5432") 65 | 66 | # if MySQL or empty 67 | else: 68 | self.lineEdit.setText("root") 69 | self.lineEdit_2.setText("root") 70 | self.lineEdit_4.setText("3306") 71 | 72 | def comboBoxChanged_2(self): 73 | 74 | # if PostgreSQL 75 | if self.comboBox_2.currentIndex() == 1: 76 | self.lineEdit_6.setText("postgres") 77 | self.lineEdit_7.setText("postgres") 78 | self.lineEdit_9.setText("5432") 79 | 80 | # if MySQL or empty 81 | else: 82 | self.lineEdit_6.setText("root") 83 | self.lineEdit_7.setText("root") 84 | self.lineEdit_9.setText("3306") 85 | 86 | 87 | def pushButtonClicked(self): 88 | 89 | _db_scisola = lib.database.Database() 90 | _db_scisola.type = str(self.comboBox.currentText()) 91 | _db_scisola.user = str(self.lineEdit.text()) 92 | _db_scisola.password = str(self.lineEdit_2.text()) 93 | _db_scisola.host = str(self.lineEdit_3.text()) 94 | _db_scisola.port = int(self.lineEdit_4.text()) 95 | _db_scisola.database = str(self.lineEdit_5.text()) 96 | 97 | _db_sc3 = lib.database.Database() 98 | _db_sc3.type = str(self.comboBox_2.currentText()) 99 | _db_sc3.user = str(self.lineEdit_6.text()) 100 | _db_sc3.password = str(self.lineEdit_7.text()) 101 | _db_sc3.host = str(self.lineEdit_8.text()) 102 | _db_sc3.port = int(self.lineEdit_9.text()) 103 | _db_sc3.database = str(self.lineEdit_10.text()) 104 | 105 | self.db_scisola = _db_scisola 106 | self.db_sc3 = _db_sc3 107 | 108 | # if database doesn't exist 109 | if not (self.db_scisola.checkDB() and self.db_sc3.checkDB()): 110 | self.label_9.setStyleSheet('QLabel { color: red }') 111 | self.label_9.setText("status: database error") 112 | 113 | else: 114 | self.accept() 115 | 116 | def getDBvalues(self): 117 | return [self.db_scisola, self.db_sc3] 118 | 119 | -------------------------------------------------------------------------------- /scisola_tools/ISOLA/invert/filtersyn.inc: -------------------------------------------------------------------------------- 1 | 2 | subroutine filterSYN(f1,f2,f3,f4,timstep,a) 3 | 4 | 5 | COMPLEX S(8192) 6 | complex ai 7 | DIMENSION A(8192) 8 | COMMON/COM/FLE,FLI,FRI,FRE,DF,ILS,IRS,NT,NTM 9 | 10 | 11 | NI=13 ! now fixed !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! 12 | 13 | 14 | fle=f1 15 | fli=f2 16 | fri=f3 17 | fre=f4 18 | dt=timstep 19 | 20 | 21 | ai=cmplx(0.,1.) 22 | PI=3.141592 23 | 24 | NT=2**NI 25 | NP=NT 26 | NT2=NT/2 27 | NTM=NT2+1 28 | NTT=NT+2 29 | DF=1./(DT*FLOAT(NT)) 30 | FMAX=FLOAT(NTM)*DF 31 | c 32 | ILS=FLE/DF+1.1 33 | IRS=FRE/DF+1.1 34 | IF(ILS.GE.NTM)THEN 35 | WRITE(*,*) 'wrong left window edge, set to f=0' 36 | ILS=1 37 | FLE=0. 38 | FLI=DF 39 | ENDIF 40 | IF(IRS.GT.NTM)THEN 41 | WRITE(*,*) 'wrong right window edge, set to f=fmax' 42 | IRS=NTM 43 | FRE=(IRS-1)*DF 44 | FRI=FRE-1 45 | ENDIF 46 | NFW=IRS-ILS+1 47 | C 48 | c ****************************************************** 49 | c 50 | 51 | c 52 | C DIRECT FOURIER TRANSFORM 53 | C 54 | DO I=1,NP 55 | S(I)=CMPLX(A(I),.0) 56 | enddo 57 | IF(NT.EQ.NP)GO TO 32 58 | NP1=NP+1 59 | DO I=NP1,NT 60 | S(I)=CMPLX(.0,.0) 61 | enddo 62 | 32 continue 63 | 64 | c ncut=ifix(50./dt) *2 !!!!! shift 50 sec x 2 !!!!!!!! FIX 65 | c do i=NP-ncut,np ! 50 sec needed because of the shift below 66 | c s(i)=cmplx(0.,0.) 67 | c enddo 68 | c this cut is important due to artificial shift of 50 sec 69 | c we cut the last 2x 50 sec: 50 sec beyond end of time window 70 | c (to prevent alias coming from the shift) 71 | c and 50 sec before end of time window 72 | c (to prevent alias coming from fitering) 73 | c 74 | c if needed it can be reduced, e.g. to 30 sec, or 20 sec 75 | c (as the artificial shift below) 76 | c CAUTION: in some cases, e,g, shallow source depth, when synthetics 77 | c have a small trend or problems due to aw, cut produces jump which 78 | c is then seen not only 100 (or 100-50) sec before end, but also at 79 | c t=0 (later shifted to 1st subsource origin time) 80 | 81 | 82 | CALL FCOOLR(NI,S,-1.) 83 | 84 | 85 | ! ATTENTION NO artificial time shift !!! 86 | DO I=2,NTM 87 | frr=float(i-1)*df 88 | S(I)=S(I)*EXP(-2.*pi*ai*frr*0.) 89 | enddo 90 | c the shift is very important to prevent problems due to filtering 91 | c filtering lenghtens the seismo before origin time and everything 92 | c before origin time is lost 93 | c (this results in abrupt cut at t=0, later seen at the source time of 1st subsource) 94 | c however, shift must be done carefully: signal should not beyond time window to the right 95 | c also remember that once we produce elemse, this is later 96 | c shifted (according the subevent source time) in time domain, so that 97 | c everything outside time window is lost=zeroed 98 | 99 | ! from velocity to DISPLACEMENT !!!!!!!!! 100 | DO I=2,NTM 101 | frr=float(i-1)*df 102 | c S(I)=S(I)/(2.*pi*ai*frr) !!!!!!!!!!!! REMOVED 103 | S(I)=S(I) 104 | enddo 105 | 106 | 107 | CALL FW(S) !!!!!!!! temporarily removed or included ???????????????????? 108 | ! filter should be used always! it is important however to remove filter when PRODUCING sunt data, but that should be made by inpinv, not here 109 | C ! then I can make inversions with same filter for (syn) 'data' as wellas synthtics 110 | C INVERSE FOURIER TRANSFORM 111 | C 112 | DO I=2,NT2 113 | J=NTT-I 114 | S(J)=CONJG(S(I)) 115 | enddo 116 | CALL FCOOLR(NI,S,+1.) 117 | C 118 | C OUTPUT OF FILTERED TIME SERIES 119 | C 120 | 121 | DO I=1,NP 122 | a(i)=REAL(S(I))/FLOAT(NT) ! constant dt*df=1/N 123 | ENDDO 124 | 125 | RETURN 126 | END 127 | 128 | -------------------------------------------------------------------------------- /scisola_tools/scisola2http/scisola/list.js: -------------------------------------------------------------------------------- 1 | /* 2 | #Copyright (C) 2015 Triantafyllis Nikolaos 3 | # 4 | #This file is part of Scisola tools. 5 | # 6 | # Scisola is free software: you can redistribute it and/or modify 7 | # it under the terms of the GNU General Public License as published by 8 | # the Free Software Foundation, either version 2 of the License, or 9 | # (at your option) any later version. 10 | # 11 | # Scisola is distributed in the hope that it will be useful, 12 | # but WITHOUT ANY WARRANTY; without even the implied warranty of 13 | # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 14 | # GNU General Public License for more details. 15 | # 16 | # You should have received a copy of the GNU General Public License 17 | # along with Scisola. If not, see . 18 | 19 | Basic Template: 20 | Design by Bryant Smith 21 | http://www.bryantsmith.com 22 | http://www.aszx.net 23 | email: templates [-at-] bryantsmith [-dot-] com 24 | */ 25 | 26 | 27 | $(document).ready(function(){ 28 | 29 | $("#map_link").click(function(){ 30 | location.reload(); 31 | }); 32 | 33 | 34 | $("#list_link").click(function(){ 35 | $("#main").html("
\ 36 | \ 37 | \ 38 | \ 39 | \ 40 | \ 41 | \ 42 | \ 43 | \ 44 | \ 45 |
Origin TimeLatitudeLongitudeDepth (km)MwMo (Nm)VRNo. StationsQuality
"); 46 | 47 | 48 | $.ajax({ 49 | type: "GET", 50 | url: "moment_tensors.xml", 51 | dataType: "xml", 52 | async: false, 53 | success: function(xml) { 54 | $(xml).find('moment_tensor').each(function(){ 55 | var originid = $(this).find('origin_id').text(); 56 | var datetime = $(this).find('origin_datetime').text(); 57 | var latitude = $(this).find('cent_latitude').text(); 58 | var longitude = $(this).find('cent_longitude').text(); 59 | var depth = $(this).find('cent_depth').text(); 60 | var mw = $(this).find('mw').text(); 61 | var mo = $(this).find('mo').text(); 62 | var red = $(this).find('var_reduction').text(); 63 | var no_stations = $(this).find('no_stations').text(); 64 | var quality = $(this).find('quality').text(); 65 | $('').html(''+datetime + '' + 66 | ''+latitude + '' + 67 | ''+longitude + '' + 68 | ''+depth + '' + 69 | ''+mw + '' + 70 | ''+mo + '' + 71 | ''+red + '' + 72 | ''+no_stations + '' + 73 | ''+quality + '').appendTo('#mts'); 74 | }); 75 | } 76 | }); 77 | }); 78 | 79 | 80 | $.urlParam = function(name){ 81 | var results = new RegExp('[\?&]' + name + '=([^&#]*)').exec(window.location.href); 82 | if (results==null){ 83 | return null; 84 | } 85 | else{ 86 | return results[1] || 0; 87 | } 88 | } 89 | }); 90 | 91 | -------------------------------------------------------------------------------- /scisola_tools/scisola2http/scisola/style_mt.css: -------------------------------------------------------------------------------- 1 | /* 2 | #Copyright (C) 2015 Triantafyllis Nikolaos 3 | # 4 | #This file is part of Scisola tools. 5 | # 6 | # Scisola is free software: you can redistribute it and/or modify 7 | # it under the terms of the GNU General Public License as published by 8 | # the Free Software Foundation, either version 2 of the License, or 9 | # (at your option) any later version. 10 | # 11 | # Scisola is distributed in the hope that it will be useful, 12 | # but WITHOUT ANY WARRANTY; without even the implied warranty of 13 | # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 14 | # GNU General Public License for more details. 15 | # 16 | # You should have received a copy of the GNU General Public License 17 | # along with Scisola. If not, see . 18 | 19 | Basic Template: 20 | Design by Bryant Smith 21 | http://www.bryantsmith.com 22 | http://www.aszx.net 23 | email: templates [-at-] bryantsmith [-dot-] com 24 | */ 25 | 26 | html, body { 27 | text-align: center; 28 | } 29 | p {text-align: left;} 30 | 31 | body { 32 | margin: 0; 33 | padding: 0; 34 | background: #697281; 35 | text-align: left; 36 | /* font-family: "Trebuchet MS", Arial, Helvetica, sans-serif; */ 37 | font-size: 16px; 38 | color: #F1F5F8; 39 | background-color:#277E56; 40 | } 41 | * 42 | { 43 | margin: 0 auto 0 auto; 44 | text-align:left;} 45 | 46 | 47 | /* A Free Design by Bryant Smith (bryantsmith.com) */ 48 | 49 | html, body { 50 | text-align: center; 51 | } 52 | p {text-align: left;} 53 | 54 | 55 | 56 | 57 | 58 | #page 59 | { 60 | margin: 0 auto 0 auto; 61 | margin-top:25px; 62 | display: block; 63 | height:auto; 64 | position: relative; 65 | overflow: hidden; 66 | background: url(images/background_mt.png) repeat-y; 67 | width: 738px; 68 | } 69 | 70 | #header 71 | { 72 | background-image:url(images/header_mt.png); 73 | background-repeat:no-repeat; 74 | height:111px; 75 | width:738px; 76 | } 77 | 78 | #header h1 79 | { 80 | position:relative; 81 | left:30px; 82 | top:25px; 83 | color:#F6F6F6; 84 | text-align:left; 85 | font-size:40px; 86 | font-weight:bold; 87 | font-family:Arial, Helvetica, sans-serif; 88 | } 89 | 90 | #header h2 91 | { 92 | position:relative; 93 | left:33px; 94 | top:21px; 95 | color:#C0C0C0; 96 | text-align:left; 97 | font-size:17px; 98 | font-weight:bold; 99 | font-family:Arial, Helvetica, sans-serif; 100 | } 101 | 102 | 103 | #bar 104 | { 105 | background-image:url(images/bar_mt.png); 106 | background-repeat:no-repeat; 107 | height:55px; 108 | width:750px; 109 | line-height:55px; 110 | padding-left:20px; 111 | padding-right:20px; 112 | } 113 | 114 | #bar .link 115 | { 116 | float:left; 117 | height:55px; 118 | } 119 | 120 | #bar .link:hover 121 | { 122 | background-image:url(images/linkrollover.png); 123 | background-repeat:no-repeat; 124 | background-position:center; 125 | 126 | 127 | } 128 | 129 | 130 | #bar a 131 | { 132 | font-size:14px; 133 | font-weight:bold; 134 | color:#FBFDFB; 135 | margin-left:27px; 136 | margin-right:27px; 137 | 138 | } 139 | 140 | #bar a:hover 141 | { 142 | color:#999999; 143 | } 144 | 145 | 146 | .contentTitle h1 147 | { 148 | margin-left:10px; 149 | padding-top:8px; 150 | font-size:20px; 151 | font-weight:bold; 152 | color:#071027; 153 | } 154 | 155 | .comments 156 | { 157 | font-size:11px; 158 | font-style:italic; 159 | } 160 | 161 | .contentText 162 | { 163 | width:700px; 164 | padding-left:10px; 165 | padding-right:10px; 166 | font-size:10px; 167 | color:#030712; 168 | line-height:20px; 169 | letter-spacing:0px; 170 | } 171 | 172 | 173 | div#mapl a { 174 | border-bottom:0px dashed #2A2A2A; 175 | } 176 | 177 | 178 | 179 | hr{ 180 | border-style: none none dotted; 181 | border-bottom:1px dashed #2A2A2A; 182 | } 183 | 184 | 185 | 186 | 187 | a 188 | { 189 | text-decoration:none; 190 | color:#000000; 191 | border-bottom:1px dashed #2A2A2A; 192 | } 193 | 194 | a:hover 195 | { 196 | color:#8F8F8F; 197 | border-bottom:1px dotted #2A2A2A; 198 | } 199 | 200 | 201 | #footer { 202 | width: 738px; 203 | height:53px; 204 | background: url(images/footer_mt.png) no-repeat; 205 | text-align:center; 206 | font-size:9px; 207 | color:#2A2A2A; 208 | padding-top:25px; 209 | } 210 | 211 | -------------------------------------------------------------------------------- /scisola_tools/ISOLA/invert/oneinv2.inc: -------------------------------------------------------------------------------- 1 | subroutine oneinv2(x,w,rold,rinv,asave,corr,ish) 2 | 3 | c Input: single elemse and 'data' (ori or residual) 4 | c Temporal shift of elemse (in loop); finding moment tensor for each step 5 | cfinding correlation for each step 6 | c Output: iseqm number of loop steps 7 | c Output: array: ish(1,... iseqm) = shifts 8 | c Output: array: corr(1,... iseqm) = correlation (psi)=1-delta/rr 9 | c Output: array: asave(1,... iseqm) = moment tensor coefficients 10 | 11 | dimension a(6),g(6),rinv(6,6),rold(6,6) 12 | dimension x(8192,21,3) 13 | dimension w(-2500:10692,21,3,6) 14 | dimension corr(100),ish(100),asave(6,100) 15 | dimension ntm(21) 16 | dimension weig(21,3) 17 | logical stat(21) 18 | 19 | 20 | common /NUMBERS/ nr,ntim,nmom,isubmax,ifirst,istep,ilast, 21 | * f1,f2,f3,f4,dt 22 | common /ST/ stat,ntm 23 | common /WEI/ weig 24 | 25 | do i=1,6 26 | a(i)=0. 27 | enddo 28 | 29 | c 30 | c COMPUTING 'POWER' OF THE DATA (observed or residual) 31 | c (used stations ONLY !) 32 | 33 | rr=0. 34 | do icom=1,3 !icom seismo comp. 35 | do ir=1,nr ! ir =station 36 | if(stat(ir)) then 37 | do itim=1,ntim ! itim=time 38 | xweig=x(itim,ir,icom)*weig(ir,icom) ! icom seismo comp 39 | rr=rr+xweig*xweig 40 | enddo 41 | endif 42 | enddo 43 | enddo 44 | rr=rr*dt 45 | 46 | 47 | 48 | C ********************************************************************* 49 | C ********NON-LINEAR PART; THE SHIFT LOOP = GRID SEARCH OVER SHIFT **** 50 | C ********************************************************************* 51 | 52 | c 53 | c STARTING LOOP on SHIFT 54 | c (time shift = ishift*dt; shift > 0 ... to the RIGHT) 55 | 56 | iseqm=(ilast-ifirst) / istep 57 | ishift=ifirst 58 | 59 | do 10 iseq=1,iseqm 60 | ishift=ishift+istep ! value of the shift 61 | 62 | c 63 | c FORMING RIGHT-HAND SIDE OF THE SYSTEM (dependent on the SHIFT) 64 | c 65 | 66 | 67 | do it=1,nmom !n moment tensor comp 68 | g(it)=0. !it time 69 | do icom=1,3 !icom seismo comp. 70 | do ir=1,nr !ir station 71 | if(stat(ir)) then 72 | do itim=1,ntim 73 | xweig=x(itim,ir,icom)*weig(ir,icom) ** 2. 74 | g(it)=g(it)+ 75 | * w(itim-ishift,ir,icom,it)*xweig * 1.e20 76 | c 1.e20 = FORMAL SCALING 77 | c (compensating the previous scaling of the system matrix) 78 | c ! this MINUS ishift in w is equivalent to PLUS in x 79 | enddo 80 | endif 81 | enddo 82 | enddo 83 | g(it)=g(it)*dt 84 | enddo 85 | 86 | 87 | c 88 | c APPLYING INVERSE MATRIX TO THE RIGHT-HAND SIDE (WITHIN SHIFT LOOP) 89 | c 90 | 91 | 92 | do n=1,nmom ! you MUST disable this part ! 93 | a(n)=0. ! ! 94 | do m=1,nmom ! C A U T I O N ! 95 | a(n)=a(n)+ rinv(n,m)*g(m) ! ! 96 | enddo ! when foc mech is prescribed ! 97 | enddo 98 | 99 | sum1=0. 100 | do n=1,nmom 101 | sum1=sum1 + a(n)*g(n)/1.e20 ! g de-scaled by 1.e20 102 | enddo 103 | 104 | 105 | xmom=1. 106 | 107 | c delta=rr - 2.*sum1 + sum2 ! 108 | delta=rr - sum1 ! the same (since sum1=sum2) 109 | 110 | psi=sum1 / rr ! psi = correlation 111 | psi=sqrt(psi) ! new 112 | 113 | 114 | c ******************************************************* 115 | c no DC constraint here (it is only in cnsinv) 116 | c ******************************************************* 117 | 118 | 119 | corr(iseq)=psi ! saving correlation; iseq counts the shifts 120 | ish(iseq)=ishift 121 | 122 | do n=1,6 ! here it must be 6, not nmom 123 | asave(n,iseq)=a(n)*xmom ! saving MOMENT COEFFICIENTS 124 | enddo 125 | 126 | 127 | 10 continue ! SHIFT LOOP FINISHED 128 | 129 | RETURN 130 | END 131 | -------------------------------------------------------------------------------- /scisola_tools/ISOLA/invert/oneinv2_12c.inc: -------------------------------------------------------------------------------- 1 | subroutine oneinv2_12c(x,w,rold,rinv,asave,corr,ish) 2 | 3 | c Input: single elemse and 'data' (ori or residual) 4 | c Temporal shift of elemse (in loop); finding moment tensor for each step 5 | cfinding correlation for each step 6 | c Output: iseqm number of loop steps 7 | c Output: array: ish(1,... iseqm) = shifts 8 | c Output: array: corr(1,... iseqm) = correlation (psi)=1-delta/rr 9 | c Output: array: asave(1,... iseqm) = moment tensor coefficients 10 | 11 | dimension a(6),g(6),rinv(6,6),rold(6,6) 12 | dimension x(8192,21,3) 13 | dimension w(-2500:10692,21,3,6) 14 | dimension corr(100),ish(100),asave(6,100) 15 | dimension ntm(21) 16 | dimension weig(21,3) 17 | logical stat(21) 18 | 19 | 20 | common /NUMBERS/ nr,ntim,nmom,isubmax,ifirst,istep,ilast, 21 | * ff1(21),ff2(21),ff3(21),ff4(21),dt 22 | common /ST/ stat,ntm 23 | common /WEI/ weig 24 | 25 | do i=1,6 26 | a(i)=0. 27 | enddo 28 | 29 | c 30 | c COMPUTING 'POWER' OF THE DATA (observed or residual) 31 | c (used stations ONLY !) 32 | 33 | rr=0. 34 | do icom=1,3 !icom seismo comp. 35 | do ir=1,nr ! ir =station 36 | if(stat(ir)) then 37 | do itim=1,ntim ! itim=time 38 | xweig=x(itim,ir,icom)*weig(ir,icom) ! icom seismo comp 39 | rr=rr+xweig*xweig 40 | enddo 41 | endif 42 | enddo 43 | enddo 44 | rr=rr*dt 45 | 46 | 47 | 48 | C ********************************************************************* 49 | C ********NON-LINEAR PART; THE SHIFT LOOP = GRID SEARCH OVER SHIFT **** 50 | C ********************************************************************* 51 | 52 | c 53 | c STARTING LOOP on SHIFT 54 | c (time shift = ishift*dt; shift > 0 ... to the RIGHT) 55 | 56 | iseqm=(ilast-ifirst) / istep 57 | ishift=ifirst 58 | 59 | do 10 iseq=1,iseqm 60 | ishift=ishift+istep ! value of the shift 61 | 62 | c 63 | c FORMING RIGHT-HAND SIDE OF THE SYSTEM (dependent on the SHIFT) 64 | c 65 | 66 | 67 | do it=1,nmom !n moment tensor comp 68 | g(it)=0. !it time 69 | do icom=1,3 !icom seismo comp. 70 | do ir=1,nr !ir station 71 | if(stat(ir)) then 72 | do itim=1,ntim 73 | xweig=x(itim,ir,icom)*weig(ir,icom) ** 2. 74 | g(it)=g(it)+ 75 | * w(itim-ishift,ir,icom,it)*xweig * 1.e20 76 | c 1.e20 = FORMAL SCALING 77 | c (compensating the previous scaling of the system matrix) 78 | c ! this MINUS ishift in w is equivalent to PLUS in x 79 | enddo 80 | endif 81 | enddo 82 | enddo 83 | g(it)=g(it)*dt 84 | enddo 85 | 86 | 87 | c 88 | c APPLYING INVERSE MATRIX TO THE RIGHT-HAND SIDE (WITHIN SHIFT LOOP) 89 | c 90 | 91 | 92 | do n=1,nmom ! you MUST disable this part ! 93 | a(n)=0. ! ! 94 | do m=1,nmom ! C A U T I O N ! 95 | a(n)=a(n)+ rinv(n,m)*g(m) ! ! 96 | enddo ! when foc mech is prescribed ! 97 | enddo 98 | 99 | sum1=0. 100 | do n=1,nmom 101 | sum1=sum1 + a(n)*g(n)/1.e20 ! g de-scaled by 1.e20 102 | enddo 103 | 104 | 105 | xmom=1. 106 | 107 | c delta=rr - 2.*sum1 + sum2 ! 108 | delta=rr - sum1 ! the same (since sum1=sum2) 109 | 110 | psi=sum1 / rr ! psi = correlation 111 | psi=sqrt(psi) ! new 112 | 113 | 114 | c ******************************************************* 115 | c no DC constraint here (it is only in cnsinv) 116 | c ******************************************************* 117 | 118 | 119 | corr(iseq)=psi ! saving correlation; iseq counts the shifts 120 | ish(iseq)=ishift 121 | 122 | do n=1,6 ! here it must be 6, not nmom 123 | asave(n,iseq)=a(n)*xmom ! saving MOMENT COEFFICIENTS 124 | enddo 125 | 126 | 127 | 10 continue ! SHIFT LOOP FINISHED 128 | 129 | RETURN 130 | END 131 | -------------------------------------------------------------------------------- /scisola/src/lib/logger.py: -------------------------------------------------------------------------------- 1 | #Copyright (C) 2014 Triantafyllis Nikolaos 2 | # 3 | #This file is part of Scisola. 4 | # 5 | # Scisola is free software: you can redistribute it and/or modify 6 | # it under the terms of the GNU General Public License as published by 7 | # the Free Software Foundation, either version 2 of the License, or 8 | # (at your option) any later version. 9 | # 10 | # Scisola is distributed in the hope that it will be useful, 11 | # but WITHOUT ANY WARRANTY; without even the implied warranty of 12 | # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 13 | # GNU General Public License for more details. 14 | # 15 | # You should have received a copy of the GNU General Public License 16 | # along with Scisola. If not, see . 17 | 18 | 19 | #!/usr/bin/env python 20 | 21 | import sys 22 | sys.dont_write_bytecode = True 23 | import logging 24 | 25 | 26 | class Logger(): 27 | 28 | def __init__(self, file_dir): 29 | self.file_dir = file_dir 30 | self.logger = logging.getLogger(self.file_dir) 31 | self.hdlr = logging.FileHandler(self.file_dir) 32 | self.form = \ 33 | logging.Formatter("%(asctime)s %(levelname)s - %(message)s") 34 | self.hdlr.setFormatter(self.form) 35 | self.logger.addHandler(self.hdlr) 36 | self.logger.setLevel(logging.DEBUG) 37 | 38 | 39 | def info(self, msg): 40 | """ 41 | writes an info message to log file 42 | """ 43 | self.logger.info(msg+"\n") 44 | 45 | 46 | def exception(self): 47 | self.logger.exception("Exception Raised") 48 | 49 | 50 | def error(self, msg): 51 | self.logger.error(msg) 52 | 53 | 54 | def stations(self, station_list): 55 | _message = "Printing available stations and their streams...\n\n" + \ 56 | "Network Station Latitude Longitude Distance_by_origin " + \ 57 | "Azimuth_by_origin Priority No._Streams Streams\n" 58 | 59 | for station in station_list: 60 | _str_streams = "[" + ", ".join([_stream.code for _stream \ 61 | in station.stream_list]) + "]" 62 | _message += str(station.network) + " " + str(station.code) + " " +\ 63 | str(station.latitude) + " " + str(station.longitude) + " " + \ 64 | str(station.distance_by_origin) + " " + \ 65 | str(station.azimuth_by_origin) + " " + str(station.priority) + " " +\ 66 | str(len(station.stream_list)) + " " + str(_str_streams) + "\n" 67 | 68 | self.info(_message) 69 | 70 | 71 | def origin(self, origin): 72 | _message = "Origin\'s parameters:\n" + \ 73 | "datetime: " + str(origin.datetime) + "\n" + \ 74 | "latitude: " + str(origin.latitude) + "\n" + \ 75 | "longitude: " + str(origin.longitude) + "\n" + \ 76 | "magnitude: " + str(origin.magnitude) + "\n" + \ 77 | "depth: " + str(origin.depth) + "\n" + \ 78 | "timestamp: " + str(origin.timestamp) + "\n" + \ 79 | "event_id: " + str(origin.event_id) 80 | 81 | self.info(_message) 82 | 83 | 84 | def settings(self, settings): 85 | 86 | _message = "Settings\'s parameters:\n" 87 | _set_d = vars(settings) 88 | 89 | for key in _set_d: 90 | _message += str(key) + ": " + str(_set_d[key]) + "\n" 91 | 92 | self.info(_message) 93 | 94 | 95 | def mts(self, mt_list): 96 | 97 | _message = '' 98 | 99 | for mt in mt_list: 100 | _mt_d = vars(mt) 101 | 102 | _message += "Moment Tensor solution for depth (in km): " +\ 103 | str(mt.cent_depth) + "\n" 104 | 105 | for key in _mt_d: 106 | _message += str(key) + ": " + str(_mt_d[key]) + "\n" 107 | 108 | _message += "\n" 109 | 110 | self.info(_message) 111 | 112 | 113 | def sectors(self, sectors): 114 | _message = "Sectors' distribution is: (in degrees)" 115 | 116 | _sectors = sectors.keys() 117 | _sectors.sort() 118 | 119 | for _sector in _sectors: 120 | _message += "\n" + '[' + str(_sector) + '-' + \ 121 | str(int(_sector + 45)) + '): ' 122 | 123 | if sectors[_sector]: 124 | for station in sectors[_sector]: 125 | _message += str(station.network) + "." + \ 126 | str(station.code) + " " 127 | else: 128 | _message += "None" 129 | 130 | self.info(_message) 131 | 132 | --------------------------------------------------------------------------------