StandardReliabilityConvergenceCheck.cpp

Go to the documentation of this file.
00001 /* ****************************************************************** **
00002 **    OpenSees - Open System for Earthquake Engineering Simulation    **
00003 **          Pacific Earthquake Engineering Research Center            **
00004 **                                                                    **
00005 **                                                                    **
00006 ** (C) Copyright 2001, The Regents of the University of California    **
00007 ** All Rights Reserved.                                               **
00008 **                                                                    **
00009 ** Commercial use of this program without express permission of the   **
00010 ** University of California, Berkeley, is strictly prohibited.  See   **
00011 ** file 'COPYRIGHT'  in main directory for information on usage and   **
00012 ** redistribution,  and for a DISCLAIMER OF ALL WARRANTIES.           **
00013 **                                                                    **
00014 ** Developed by:                                                      **
00015 **   Frank McKenna (fmckenna@ce.berkeley.edu)                         **
00016 **   Gregory L. Fenves (fenves@ce.berkeley.edu)                       **
00017 **   Filip C. Filippou (filippou@ce.berkeley.edu)                     **
00018 **                                                                    **
00019 ** Reliability module developed by:                                   **
00020 **   Terje Haukaas (haukaas@ce.berkeley.edu)                          **
00021 **   Armen Der Kiureghian (adk@ce.berkeley.edu)                       **
00022 **                                                                    **
00023 ** ****************************************************************** */
00024                                                                         
00025 // $Revision: 1.2 $
00026 // $Date: 2003/10/27 23:45:42 $
00027 // $Source: /usr/local/cvs/OpenSees/SRC/reliability/analysis/convergenceCheck/StandardReliabilityConvergenceCheck.cpp,v $
00028 
00029 
00030 //
00031 // Written by Terje Haukaas (haukaas@ce.berkeley.edu)
00032 //
00033 
00034 #include <StandardReliabilityConvergenceCheck.h>
00035 #include <ReliabilityConvergenceCheck.h>
00036 #include <math.h>
00037 #include <Vector.h>
00038 
00039 #include <fstream>
00040 #include <iomanip>
00041 #include <iostream>
00042 using std::ifstream;
00043 using std::ios;
00044 using std::setw;
00045 using std::setprecision;
00046 using std::setiosflags;
00047 
00048 
00049 StandardReliabilityConvergenceCheck::StandardReliabilityConvergenceCheck(double passedE1, 
00050                                                                                                                                                  double passedE2, 
00051                                                                                                                                                  double pscaleValue,
00052                                                                                                                                                  int print)
00053 :ReliabilityConvergenceCheck()
00054 {
00055         e1 = passedE1;
00056         e2 = passedE2;
00057         criterium1 = 0.0;
00058         criterium2 = 0.0;
00059         scaleValue = pscaleValue;
00060         printFlag = print;
00061 }
00062 
00063 StandardReliabilityConvergenceCheck::~StandardReliabilityConvergenceCheck()
00064 {
00065 }
00066 
00067 
00068 
00069 int     
00070 StandardReliabilityConvergenceCheck::setScaleValue(double passedScaleValue)
00071 {
00072         if (scaleValue == 0.0) {
00073                 scaleValue = passedScaleValue;
00074         }
00075 
00076         return 0;
00077 }
00078 
00079 
00080 int     
00081 StandardReliabilityConvergenceCheck::check(Vector u, double g, Vector gradG)
00082 {
00083         if (scaleValue == 0.0) {
00084                 opserr << "StandardReliabilityConvergenceCheck::check() --" << endln
00085                         << " scale value has not been set!" << endln;
00086         }
00087 
00088 
00089         // Alpha vector
00090         Vector alpha = gradG *  ( (-1.0) / gradG.Norm() );
00091 
00092 
00093         // The scaling factor (rather new development)
00094         double temp0=u.Norm();
00095         if (temp0 < 1.0) {
00096                 temp0 = 1.0; 
00097         }
00098 
00099 
00100         // Scaled u-vector
00101         Vector u_scaled = (1.0/temp0) * u;
00102 
00103 
00104         // Convergence criteria
00105         Vector temp1 = u_scaled - (alpha^u_scaled)*alpha;
00106         criterium1 = fabs(g / scaleValue);
00107         criterium2 = temp1.Norm();
00108 
00109 
00110         // Inform user about convergence status 
00111         static ofstream logfile( "ConvergenceCheckLog.txt", ios::out );
00112         char outputString[100];
00113         sprintf(outputString,"check1=(%11.3e), check2=(%10.3e), dist=%16.14f",criterium1,criterium2,u.Norm());
00114         if (printFlag!=0) {
00115                 opserr << outputString << endln;
00116         }
00117         logfile << outputString << endln;
00118         logfile.flush();
00119 
00120 
00121         // Return '1' if the analysis converged ('-1' otherwise)
00122         if ( ( criterium1 < e1 ) && ( criterium2 < e2 ) ) {
00123                 return 1;
00124         }
00125         else {
00126                 return -1;
00127         }
00128 }
00129 
00130 int 
00131 StandardReliabilityConvergenceCheck::getNumberOfCriteria()
00132 {
00133         return 2;
00134 }
00135 
00136 double 
00137 StandardReliabilityConvergenceCheck::getCriteriaValue(int whichCriteria)
00138 {
00139         if (whichCriteria == 1) {
00140                 return criterium1; 
00141         }
00142         else if (whichCriteria == 2) {
00143                 return criterium2;
00144         }
00145         else {
00146                 opserr << "StandardReliabilityConvergenceCheck::getCriteriaValue() -- " << endln
00147                         << " criterium number " << whichCriteria << " does not exist!" << endln;
00148                 return 0.0;
00149         }
00150 
00151 }

Generated on Mon Oct 23 15:05:25 2006 for OpenSees by doxygen 1.5.0