Changeset 8019


Ignore:
Timestamp:
06/13/19 15:31:08 (4 months ago)
Author:
kevin
Message:

Added Arias Intensity and ColorPGA option

Location:
trunk/src
Files:
8 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/libsrc/util/rw_strongmotionII.c

    r7513 r8019  
    4040#define SM_RSA  1<<6 
    4141#define SM_QID  1<<7 
    42 #define SM_ALL (SM_SCNL | SM_TIME | SM_ALT | SM_PGA | SM_PGV | SM_PGD | SM_RSA | SM_QID) 
     42#define SM_AI   1<<8 
     43#define SM_ALL (SM_SCNL | SM_TIME | SM_ALT | SM_PGA | SM_PGV | SM_PGD | SM_RSA | SM_QID | SM_AI) 
    4344#define SM_REQ (SM_SCNL | SM_TIME) 
    4445 
     
    625626           } 
    626627           /* End of QID line processing */ 
     628       } 
     629       else if (strcmp(token, "AI:") == 0) { 
     630           if (HAVE(SM_SCNL) ) { 
     631               token = strtok(NULL, " \n"); 
     632               if (token == NULL) { 
     633                   if (logErr)  
     634                       logit("t", "error parsing SM AI line <%s>\n", line); 
     635                   status = -1; 
     636                   goto NextLine; 
     637               } 
     638               if( sscanf( token, "%lf", &sm->ai) != 1) { 
     639                   if (logErr)  
     640                       logit("t", "error parsing AI from <%s>\n", line); 
     641                   status = -1; 
     642                   goto NextLine; 
     643               } 
     644               smState |= SM_AI; 
     645           } else { 
     646               /* still looking for SCNL line to start message */ 
     647               goto NextLine; 
     648           } 
     649           /* End of AI line processing */ 
    627650       } else { 
    628651           /* unknown line; skip it for now */ 
     
    704727   if( strappend( buf, buflen, tmp ) ) return( -1 ); 
    705728 
     729/* Print the AI (Arias Intensity) */ 
     730   if( sm->ai != 0. ) 
     731   { 
     732     sprintf( tmp, "AI: %.6lf\n", sm->ai ); 
     733     if( strappend( buf, buflen, tmp ) ) return( -1 ); 
     734   } 
     735 
    706736   return( 0 ); 
    707737} 
     
    755785/* Print eventid & author */ 
    756786   logit("","\nQID: %s %s\n", sm->qid, sm->qauthor); 
     787 
     788/* Print the AI (Arias Intensity) */ 
     789   if( sm->ai != 0. ) 
     790   { 
     791     logit("","AI: %.6lf\n", sm->ai ); 
     792   } 
    757793 
    758794   return; 
  • trunk/src/reporting/gmewhtmlemail/gmewhtmlemail.c

    r8013 r8019  
    3030 *****************************************************************************/ 
    3131 
    32 #define VERSION_STR "1.8.1 - 2019-05-29" 
     32#define VERSION_STR "1.8.2 - 2019-06-12" 
    3333 
    3434#define MAX_STRING_SIZE 1024    /* used for many static string place holders */ 
     
    8686#define MAX_POL_LEN 120000      /* Maximum number of samples in a trace gif */ 
    8787#define MAX_WAVE_SERVERS 10 
     88#define MAX_COLOR_PGAS 10 
    8889#define MAX_ADDRESS 80 
    8990#define MAX_PORT 6 
     
    243244static char       KMLpreamble[MAX_STRING_SIZE];          // where to find the KML preamble needed for this. 
    244245static int        nwaveservers = 0;       // Number of waveservers 
     246static int        ncolorpga = 0;          // Number of color PGA values 
    245247static int        nemailrecipients = 0;   // Number of email recipients 
    246248static int        nStaticEmailRecipents = 0; 
     
    313315// Array of waveservers 
    314316static WAVESERV   waveservers[MAX_WAVE_SERVERS]; 
     317// Array of Color PGA values and colors 
     318static double colorpga_values[MAX_COLOR_PGAS]; 
     319static char   colorpga_colors[MAX_COLOR_PGAS][MAX_STRING_SIZE]; 
    315320// Array of email recipients 
    316321static EMAILREC   *emailrecipients = NULL; 
     
    16711676                MaxFacilitiesInTable = k_int(); 
    16721677            } 
    1673              
     1678            else if ( k_its("ColorPGA") ) 
     1679            { 
     1680                if (ncolorpga < MAX_COLOR_PGAS) 
     1681                { 
     1682                    colorpga_values[ncolorpga] = k_val(); 
     1683                    // if other color PGA values and this value is not less than previous value 
     1684                    if (ncolorpga > 0 && colorpga_values[ncolorpga] >= colorpga_values[ncolorpga - 1]) 
     1685                    { 
     1686                        logit("e", "gmewhtmlemail: Invalid ColorPGA value (%lf). Exiting.\n", 
     1687                              colorpga_values[ncolorpga]); 
     1688                        exit(-1); 
     1689                    } 
     1690                    strncpy(colorpga_colors[ncolorpga], k_str(), MAX_STRING_SIZE); 
     1691                    ncolorpga++; 
     1692                } 
     1693                else 
     1694                { 
     1695                    logit("e", "gmewhtmlemail: Excessive number of ColorPGA values. Exiting.\n"); 
     1696                    exit(-1); 
     1697                } 
     1698            } 
     1699 
    16741700             
    16751701 
     
    18881914        logit("","EstimatePGA result: %lf (%s)\n", ePGA, resultStr ); 
    18891915    return ePGA; 
     1916} 
     1917 
     1918static char* determine_pga_color(double pga) 
     1919{ 
     1920    if (ncolorpga > 0) 
     1921    { 
     1922        int i; 
     1923        for ( i = 0; i < ncolorpga; i++) 
     1924        { 
     1925            if (pga >= colorpga_values[i]) 
     1926            { 
     1927                return colorpga_colors[i]; 
     1928            } 
     1929        } 
     1930    } 
     1931    return NULL; 
     1932} 
     1933 
     1934static void print_table_header_cell(FILE *htmlfile, char *text) 
     1935{ 
     1936    fprintf( htmlfile, "<th><font size=\"1\" face=\"Sans-serif\" color=\"FFFFFF\">%s</font></th>", text); 
     1937} 
     1938 
     1939static void print_table_cell(FILE *htmlfile, double value) 
     1940{ 
     1941    fprintf( htmlfile, "<td style=\"text-align:right\"><font size=\"1\" face=\"Sans-serif\">%1.6lf</font></td>", value); 
     1942} 
     1943 
     1944static void print_table_cell_color(FILE *htmlfile, double value, char *color) 
     1945{ 
     1946    if (color == NULL) 
     1947    { 
     1948        fprintf( htmlfile, "<td style=\"text-align:right\"><font size=\"1\" face=\"Sans-serif\">%1.6lf</font></td>", value); 
     1949    } 
     1950    else 
     1951    { 
     1952        fprintf( htmlfile, "<td style=\"text-align:right;background-color:%s\"><font size=\"1\" face=\"Sans-serif\">%1.6lf</font></td>", color, value); 
     1953    } 
    18901954} 
    18911955 
     
    19081972        int i = 0, j = 0, ix = 0, jx = 0, snl_i = 0; //various counter variables 
    19091973        int num_snl = 0;        //so we don't have to always deference snl_sites  
     1974        char *color; 
     1975        double pgapg; 
    19101976 
    19111977        //Calculate the appropriate stream order: 
     
    19502016        fprintf( htmlfile, "<tr bgcolor=\"000060\">"); 
    19512017 
    1952         fprintf( htmlfile, "<th>#</th><th><font size=\"1\" face=\"Sans-serif\" color=\"FFFFFF\">Station</font></th>"); 
     2018        fprintf( htmlfile, "<th>#</th>"); 
     2019        print_table_header_cell( htmlfile, "Station"); 
    19532020        if ( fromArc ) { 
    1954                 fprintf( htmlfile, "<th><font size=\"1\" face=\"Sans-serif\" color=\"FFFFFF\">Distance (km)</font></th>"); 
     2021                print_table_header_cell( htmlfile, "Distance (km)"); 
    19552022            if ( ShowMiles ) 
    1956                 fprintf( htmlfile, "<th><font size=\"1\" face=\"Sans-serif\" color=\"FFFFFF\">Distance (mi)</font></th>"); 
    1957         } 
    1958         fprintf( htmlfile, "<th><font size=\"1\" face=\"Sans-serif\" color=\"FFFFFF\">PGA (%%g)</font></th>"); 
    1959         fprintf( htmlfile, "<th><font size=\"1\" face=\"Sans-serif\" color=\"FFFFFF\">PGA (g)</font></th>"); 
    1960         fprintf( htmlfile, "<th><font size=\"1\" face=\"Sans-serif\" color=\"FFFFFF\">PGA (cm/s/s)</font></th>"); 
    1961         fprintf( htmlfile, "<th><font size=\"1\" face=\"Sans-serif\" color=\"FFFFFF\">PGV (cm/s)</font></th>"); 
    1962         fprintf( htmlfile, "<th><font size=\"1\" face=\"Sans-serif\" color=\"FFFFFF\">PGD (cm)</font></th>"); 
    1963         fprintf( htmlfile, "<th><font size=\"1\" face=\"Sans-serif\" color=\"FFFFFF\">RSA 0.3s (cm/s/s)</font></th>"); 
    1964         fprintf( htmlfile, "<th><font size=\"1\" face=\"Sans-serif\" color=\"FFFFFF\">RSA 1s (cm/s/s)</font></th>"); 
    1965         fprintf( htmlfile, "<th><font size=\"1\" face=\"Sans-serif\" color=\"FFFFFF\">RSA 3s (cm/s/s)</font></th>"); 
     2023                print_table_header_cell( htmlfile, "Distance (mi)"); 
     2024        } 
     2025        print_table_header_cell( htmlfile, "AI"); 
     2026        print_table_header_cell( htmlfile, "PGA (%g)"); 
     2027        print_table_header_cell( htmlfile, "PGA (g)"); 
     2028        print_table_header_cell( htmlfile, "PGA (cm/s/s)"); 
     2029        print_table_header_cell( htmlfile, "PGV (cm/s)"); 
     2030        print_table_header_cell( htmlfile, "PGD (cm)"); 
     2031        print_table_header_cell( htmlfile, "RSA 0.3s (cm/s/s)"); 
     2032        print_table_header_cell( htmlfile, "RSA 1s (cm/s/s)"); 
     2033        print_table_header_cell( htmlfile, "RSA 3s (cm/s/s)"); 
    19662034        fprintf( htmlfile, "</tr>\n" ); 
    19672035 
     
    19862054                } 
    19872055                        } 
    1988             fprintf( htmlfile, "<td style=\"text-align:right\"><font size=\"1\" face=\"Sans-serif\">%1.6lf</font></td>", 100*smForSite[ix]->pga/CM_S_S_1_g); 
    1989             fprintf( htmlfile, "<td style=\"text-align:right\"><font size=\"1\" face=\"Sans-serif\">%1.6lf</font></td>", smForSite[ix]->pga/CM_S_S_1_g); 
    1990             fprintf( htmlfile, "<td style=\"text-align:right\"><font size=\"1\" face=\"Sans-serif\">%1.6lf</font></td>", smForSite[ix]->pga); 
    1991             fprintf( htmlfile, "<td style=\"text-align:right\"><font size=\"1\" face=\"Sans-serif\">%1.6lf</font></td>", smForSite[ix]->pgv); 
    1992             fprintf( htmlfile, "<td style=\"text-align:right\"><font size=\"1\" face=\"Sans-serif\">%1.6lf</font></td>", smForSite[ix]->pgd); 
     2056            print_table_cell( htmlfile, smForSite[ix]->ai); 
     2057            pgapg = 100*smForSite[ix]->pga/CM_S_S_1_g; 
     2058            color = determine_pga_color(pgapg); 
     2059            print_table_cell_color( htmlfile, pgapg, color); 
     2060            print_table_cell_color( htmlfile, smForSite[ix]->pga/CM_S_S_1_g, color); 
     2061            print_table_cell_color( htmlfile, smForSite[ix]->pga, color); 
     2062            print_table_cell( htmlfile, smForSite[ix]->pgv); 
     2063            print_table_cell( htmlfile, smForSite[ix]->pgd); 
    19932064            for ( j=0; j<3; j++ ) { 
    19942065                if ( j < smForSite[i]->nrsa) { 
    1995                         fprintf( htmlfile, "<td style=\"text-align:right\"><font size=\"1\" face=\"Sans-serif\">%1.6lf</font></td>", smForSite[ix]->rsa[j]); 
     2066                        print_table_cell( htmlfile, smForSite[ix]->rsa[j]); 
    19962067                                } else { 
    19972068                    fprintf( htmlfile, "<td>&nbsp;</td>"); 
  • trunk/src/reporting/gmewhtmlemail/gmewhtmlemail.d

    r8007 r8019  
    11# gmewhtmlemail configuration file 
    2  
    32 
    43# Earthworm stuff 
     
    259258 
    260259# DontHiliteMax     # Option to night highlight maxima 
     260 
     261# list of PGA(%g) threshold values and colors (name or #FFFFFF) in decreasing order 
     262ColorPGA 25 red 
     263ColorPGA 10 orange 
     264ColorPGA 5 yellow 
     265ColorPGA 3 green 
     266ColorPGA 1 darkgreen 
     267ColorPGA 0.1 lightgreen 
     268ColorPGA 0.01 blue 
  • trunk/src/seismic_processing/gmew/gm.h

    r7593 r8019  
    254254  long preTriggerSeconds;  /* Used to compute start time, P and S           */ 
    255255  char ChannelNumberMap[5];     /* map channel numbers to GM_ orientation codes */ 
     256  int  ariasIntensity;   /* set to 1 to calculate the arias intensity */ 
    256257} GMPARAMS; 
    257258 
  • trunk/src/seismic_processing/gmew/gm_config.c

    r7593 r8019  
    328328  pgmParams->allowDuplicates=0; /* default: ignore dup channel names (including location code diffs) */ 
    329329  pgmParams->sendActivate=0; /* default: do not send ACTIVATE messages when done with XML files */ 
     330  pgmParams->ariasIntensity=0; /* default: do not calculate the arias intensity */ 
    330331   
    331332  /* Set to zero one init flag for each required command */ 
     
    11731174        } 
    11741175      } 
     1176      /* Optional: arias intensity */ 
     1177      else if (k_its( "ariasIntensity") ) 
     1178      { 
     1179        pgmParams->ariasIntensity = 1; 
     1180      } 
    11751181      else if (k_its( "sendActivate") ) 
    11761182      { 
  • trunk/src/seismic_processing/gmew/gm_util.c

    r7593 r8019  
    7272#include "gm_xml.h" 
    7373#include "../localmag/lm_site.h" 
     74 
     75#define GRAVITY 980.665 /* G cm/s/s  */ 
    7476 
    7577/* Standard Spectral Response periods and damping value */ 
     
    744746} 
    745747 
     748/* calcAriasIntensity: Calculate the AI (Arias Intensity) from acceleration data. 
     749*/ 
     750double calcAriasIntensity(double delta, double *acc, int acclen) 
     751{ 
     752  int i; 
     753  double acc_value, ai, sum = 0.; 
     754  // integrate acceleration squared 
     755  for (i = 0; i < acclen; i++) 
     756  { 
     757    acc_value = acc[i]; 
     758    // square the acceleration 
     759    acc_value *= acc_value; 
     760    if (i == 0 || i == acclen - 1) 
     761      sum += acc_value; 
     762    else 
     763      sum += 2. * acc_value; 
     764  } 
     765  sum *= (delta/2.); 
     766  ai = sum; 
     767  ai *= (M_PI / (2. * GRAVITY)); 
     768  return ai; 
     769} 
     770 
    746771/* getPeakGM: Find the maximum absolute values of acceleration, velocity, 
    747772 *            displacement and Spectra Response from the processed data. 
     
    867892  pSms->nrsa = NSP; 
    868893   
     894  if (pgmParams->ariasIntensity) 
     895  { 
     896     pSms->ai = calcAriasIntensity(pTrace->delta, acc, pTrace->lenProc); 
     897  } 
     898 
    869899  /* Write some XML */ 
    870900  if (pgmParams->XMLDir && strlen(pgmParams->XMLDir) > 0) 
  • trunk/src/seismic_processing/gmew/gmew.c

    r7775 r8019  
    5252 
    5353 
    54 #define VERSION "v0.3.2 2018-10-28" 
     54#define VERSION "v0.3.3 2019-05-31" 
    5555 
    5656#include <stdio.h> 
  • trunk/src/seismic_processing/gmew/gmew.d

    r7593 r8019  
    243243 
    244244## OPTIONAL PARAMETER 
     245## ariasIntensity: When present this parameter causes the Arias Intensity 
     246# value to be calculated and appended to the TYPE_STRONGMOTION2 messages. 
     247# This is optional. 
     248# 
     249#ariasIntensity 
     250 
     251## OPTIONAL PARAMETER 
    245252## sendActivate: When present this parameter sends an activated_scripts 
    246253# message with the eventID as the first argument and written XML file as the 
Note: See TracChangeset for help on using the changeset viewer.