Difference between revisions of "Calling UCVM With Fortran"
From SCECpedia
Jump to navigationJump to searchm (→Example Code) |
|||
Line 4: | Line 4: | ||
− | + | program example | |
+ | |||
c UCVM Configuration Location | c UCVM Configuration Location | ||
CHARACTER(LEN=32) ucvmconf | CHARACTER(LEN=32) ucvmconf | ||
Line 12: | Line 13: | ||
INTEGER pts | INTEGER pts | ||
− | c The UCVM point data structure. | + | c The UCVM point data structure. |
− | c coord(1) is longitude | + | c coord(1) is longitude |
− | c coord(2) is latitutde | + | c coord(2) is latitutde |
− | c coord(3) is depth | + | c coord(3) is depth |
− | + | TYPE :: ucvm_point_t | |
− | + | REAL*8 coord(3) | |
− | + | END TYPE ucvm_point_t | |
− | c Generic property structure | + | c Generic property structure |
− | c Source is where it comes from | + | c Source is where it comes from |
− | c vp is P-wave velocity in m/s | + | c vp is P-wave velocity in m/s |
− | c vs is S-wave velocity in m/s | + | c vs is S-wave velocity in m/s |
− | c rho is density in kg/m^3 | + | c rho is density in kg/m^3 |
− | + | TYPE :: ucvm_prop_t | |
− | + | INTEGER source | |
− | + | REAL*8 vp | |
− | + | REAL*8 vs | |
− | + | REAL*8 rho | |
− | + | END TYPE ucvm_prop_t | |
− | c Returned data structure | + | c Returned data structure |
− | + | TYPE :: ucvm_data_t | |
− | + | REAL*8 surf | |
− | + | REAL*8 vs30 | |
− | + | REAL*8 depth | |
− | + | INTEGER domain | |
− | + | REAL*8 shift_cr | |
− | + | REAL*8 shift_gtl | |
− | + | type(ucvm_prop_t) crust | |
− | + | type(ucvm_prop_t) gtl | |
− | + | type(ucvm_prop_t) cmb | |
− | + | END TYPE ucvm_data_t | |
− | c For our example we'll query five points | + | c For our example we'll query five points |
− | + | type(ucvm_point_t) point(5) | |
− | c And we'll get back five sets of material properties | + | c And we'll get back five sets of material properties |
− | + | type(ucvm_data_t) returnData(5) | |
− | c Number of points is 5. | + | c Number of points is 5. |
− | + | pts = 5 | |
− | c We'll start at -118, 34 at 0 depth and go down by 1000m | + | c We'll start at -118, 34 at 0 depth and go down by 1000m |
− | c each step | + | c each step |
− | + | do 10 i = 1, 5 | |
− | + | point(i)%coord(1) = -118 | |
− | + | point(i)%coord(2) = 34 | |
− | 10 | + | 10 point(i)%coord(3) = (i - 1) * 1000 |
− | c Where is our configuration file? | + | c Where is our configuration file? |
− | + | ucvmconf = "/home/scec-01/davidgil/ucvm.conf" | |
− | c What model are we querying? | + | c What model are we querying? |
− | + | model = "cvms" | |
− | c Initialize UCVM | + | c Initialize UCVM |
− | + | call ucvm_init(ucvmconf) | |
− | c Add the model to UCVM | + | c Add the model to UCVM |
− | + | call ucvm_add_model(model) | |
− | c Query the model. Note that the number of points is passed | + | c Query the model. Note that the number of points is passed |
− | c by value, not reference. | + | c by value, not reference. |
− | + | call ucvm_query(%VAL(pts), point, returnData) | |
− | + | print *, model, " results for lon -118, lat 34" | |
− | c Print out the results. | + | c Print out the results. |
− | + | do 20 i = 1, 5 | |
− | + | print *, "Depth ", (i - 1) * 1000 | |
− | + | print *, "Vs ", returnData(i)%crust%vs | |
− | + | print *, "Vp ", returnData(i)%crust%vp | |
− | + | print *, "Rho ", returnData(i)%crust%rho | |
− | 20 continue | + | 20 continue |
− | c Close UCVM now that we've queried the points | + | c Close UCVM now that we've queried the points |
− | + | call ucvm_finalize() | |
− | + | end |
Revision as of 22:36, 20 June 2013
Calling UCVM
Example Code
program example
c UCVM Configuration Location CHARACTER(LEN=32) ucvmconf c Model Name CHARACTER(LEN=4) model c Number of points we're passing to ucvm_query INTEGER pts
c The UCVM point data structure. c coord(1) is longitude c coord(2) is latitutde c coord(3) is depth TYPE :: ucvm_point_t REAL*8 coord(3) END TYPE ucvm_point_t
c Generic property structure c Source is where it comes from c vp is P-wave velocity in m/s c vs is S-wave velocity in m/s c rho is density in kg/m^3 TYPE :: ucvm_prop_t INTEGER source REAL*8 vp REAL*8 vs REAL*8 rho END TYPE ucvm_prop_t
c Returned data structure TYPE :: ucvm_data_t REAL*8 surf REAL*8 vs30 REAL*8 depth INTEGER domain REAL*8 shift_cr REAL*8 shift_gtl type(ucvm_prop_t) crust type(ucvm_prop_t) gtl type(ucvm_prop_t) cmb END TYPE ucvm_data_t
c For our example we'll query five points type(ucvm_point_t) point(5) c And we'll get back five sets of material properties type(ucvm_data_t) returnData(5)
c Number of points is 5. pts = 5
c We'll start at -118, 34 at 0 depth and go down by 1000m c each step do 10 i = 1, 5 point(i)%coord(1) = -118 point(i)%coord(2) = 34 10 point(i)%coord(3) = (i - 1) * 1000
c Where is our configuration file? ucvmconf = "/home/scec-01/davidgil/ucvm.conf"
c What model are we querying? model = "cvms"
c Initialize UCVM call ucvm_init(ucvmconf)
c Add the model to UCVM call ucvm_add_model(model)
c Query the model. Note that the number of points is passed c by value, not reference. call ucvm_query(%VAL(pts), point, returnData)
print *, model, " results for lon -118, lat 34"
c Print out the results. do 20 i = 1, 5 print *, "Depth ", (i - 1) * 1000 print *, "Vs ", returnData(i)%crust%vs print *, "Vp ", returnData(i)%crust%vp print *, "Rho ", returnData(i)%crust%rho 20 continue
c Close UCVM now that we've queried the points call ucvm_finalize()
end