OptimalityConditionReliabilityConvergenceCheck.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/OptimalityConditionReliabilityConvergenceCheck.cpp,v $
00028 
00029 
00030 //
00031 // Written by Terje Haukaas (haukaas@ce.berkeley.edu)
00032 //
00033 
00034 #include <OptimalityConditionReliabilityConvergenceCheck.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 OptimalityConditionReliabilityConvergenceCheck::OptimalityConditionReliabilityConvergenceCheck(double passedE1, double passedE2, double pscaleValue, int print)
00050 :ReliabilityConvergenceCheck()
00051 {
00052         e1 = passedE1;
00053         e2 = passedE2;
00054         criterium1 = 0.0;
00055         criterium2 = 0.0;
00056         scaleValue = pscaleValue;
00057         printFlag = print;
00058 }
00059 
00060 OptimalityConditionReliabilityConvergenceCheck::~OptimalityConditionReliabilityConvergenceCheck()
00061 {
00062 }
00063 
00064 
00065 
00066 int     
00067 OptimalityConditionReliabilityConvergenceCheck::setScaleValue(double passedScaleValue)
00068 {
00069         if (scaleValue == 0.0) {
00070                 scaleValue = passedScaleValue;
00071         }
00072 
00073         return 0;
00074 }
00075 
00076 
00077 int     
00078 OptimalityConditionReliabilityConvergenceCheck::check(Vector u, double g, Vector gradG)
00079 {
00080         if (scaleValue == 0.0) {
00081                 opserr << "OptimalityConditionReliabilityConvergenceCheck::check() --" << endln
00082                         << " scale value has not been set!" << endln;
00083         }
00084 
00085         // Convergence criteria
00086         criterium1 = fabs(g / scaleValue);
00087         criterium2 = 1.0-1.0/(gradG.Norm()*u.Norm()) * (gradG^u);
00088 
00089 
00090         // Inform user about convergence status 
00091         static ofstream logfile( "SearchLog.out", ios::out );
00092         char outputString[100];
00093         sprintf(outputString,"check1=(%11.3e), check2=(%10.3e), dist=%16.14f",criterium1,criterium2,u.Norm());
00094         if (printFlag!=0) {
00095                 opserr << outputString << endln;
00096         }
00097         logfile << outputString << endln;
00098 
00099 
00100         // Return '1' if the analysis converged ('-1' otherwise)
00101         if ( ( criterium1 < e1 ) && ( criterium2 < e2 ) ) {
00102                 return 1;
00103         }
00104         else {
00105                 return -1;
00106         }
00107 }
00108 
00109 int 
00110 OptimalityConditionReliabilityConvergenceCheck::getNumberOfCriteria()
00111 {
00112         return 2;
00113 }
00114 
00115 double 
00116 OptimalityConditionReliabilityConvergenceCheck::getCriteriaValue(int whichCriteria)
00117 {
00118         if (whichCriteria == 1) {
00119                 return criterium1; 
00120         }
00121         else if (whichCriteria == 2) {
00122                 return criterium2;
00123         }
00124         else {
00125                 opserr << "OptimalityConditionReliabilityConvergenceCheck::getCriteriaValue() -- " << endln
00126                         << " criterium number " << whichCriteria << " does not exist!" << endln;
00127                 return 0.0;
00128         }
00129 
00130 }

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