Difference between revisions of "Calling UCVM With Fortran"

From SCECpedia
Jump to navigationJump to search
Line 12: Line 12:
 
         c      Number of points we're passing to ucvm_query
 
         c      Number of points we're passing to ucvm_query
 
                 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
Line 20: Line 20:
 
                       REAL*8 coord(3)
 
                       REAL*8 coord(3)
 
                 END TYPE ucvm_point_t
 
                 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
Line 32: Line 32:
 
                         REAL*8 rho
 
                         REAL*8 rho
 
                 END TYPE ucvm_prop_t
 
                 END TYPE ucvm_prop_t
 
+
         
 
         c      Returned data structure
 
         c      Returned data structure
 
                 TYPE :: ucvm_data_t
 
                 TYPE :: ucvm_data_t
Line 45: Line 45:
 
                         type(ucvm_prop_t) cmb
 
                         type(ucvm_prop_t) cmb
 
                 END TYPE ucvm_data_t
 
                 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)
 
                 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)
 
                 type(ucvm_data_t) returnData(5)
 
+
         
 
         c      Number of points is 5.
 
         c      Number of points is 5.
 
                 pts = 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
Line 60: Line 60:
 
                         point(i)%coord(2) = 34
 
                         point(i)%coord(2) = 34
 
         10            point(i)%coord(3) = (i - 1) * 1000
 
         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"
 
                 ucvmconf = "/home/scec-01/davidgil/ucvm.conf"
 
+
         
 
         c      What model are we querying?
 
         c      What model are we querying?
 
                 model = "cvms"
 
                 model = "cvms"
 
+
         
 
         c      Initialize UCVM
 
         c      Initialize UCVM
 
                 call ucvm_init(ucvmconf)
 
                 call ucvm_init(ucvmconf)
 
+
         
 
         c      Add the model to UCVM
 
         c      Add the model to UCVM
 
                 call ucvm_add_model(model)
 
                 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)
 
                 call ucvm_query(%VAL(pts), point, returnData)
 
+
         
 
                 print *, model, " results for lon -118, lat 34"
 
                 print *, model, " results for lon -118, lat 34"
 
+
         
 
         c      Print out the results.
 
         c      Print out the results.
 
                 do 20 i = 1, 5
 
                 do 20 i = 1, 5
Line 86: Line 86:
 
                       print *, "Rho ", returnData(i)%crust%rho
 
                       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()
 
                 call ucvm_finalize()
 
+
         
 
                 end
 
                 end

Revision as of 22:37, 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