├── 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 |
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 | | Origin Time | \
37 | Latitude | \
38 | Longitude | \
39 | Depth (km) | \
40 | Mw | \
41 | Mo (Nm) | \
42 | VR | \
43 | No. Stations | \
44 | Quality | \
45 |
");
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 |
--------------------------------------------------------------------------------