Calling UCVM With Fortran: Difference between revisions

From SCECpedia
Jump to navigationJump to search
Davidgil (talk | contribs)
Davidgil (talk | contribs)
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