Calling UCVM With Fortran: Difference between revisions
From SCECpedia
Jump to navigationJump to search
| 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