Difference between revisions of "Calling UCVM With Fortran"

From SCECpedia
Jump to navigationJump to search
Line 4: Line 4:
  
  
        program example
+
                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
+
                TYPE :: ucvm_point_t
                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
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
+
                TYPE :: ucvm_prop_t
                INTEGER source
+
                        INTEGER source
                REAL*8 vp
+
                        REAL*8 vp
                REAL*8 vs
+
                        REAL*8 vs
                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
                REAL*8 surf
+
                        REAL*8 surf
                REAL*8 vs30
+
                        REAL*8 vs30
                REAL*8 depth
+
                        REAL*8 depth
                INTEGER domain
+
                        INTEGER domain
                REAL*8 shift_cr
+
                        REAL*8 shift_cr
                REAL*8 shift_gtl
+
                        REAL*8 shift_gtl
                type(ucvm_prop_t) crust
+
                        type(ucvm_prop_t) crust
                type(ucvm_prop_t) gtl
+
                        type(ucvm_prop_t) gtl
                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
        do 10 i = 1, 5
+
                do 10 i = 1, 5
                point(i)%coord(1) = -118
+
                        point(i)%coord(1) = -118
                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
                print *, "Depth ", (i - 1) * 1000
+
                        print *, "Depth ", (i - 1) * 1000
                print *, "Vs ", returnData(i)%crust%vs  
+
                        print *, "Vs ", returnData(i)%crust%vs  
                print *, "Vp ", returnData(i)%crust%vp  
+
                        print *, "Vp ", returnData(i)%crust%vp  
                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: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