2 D HIGH RESOLUTION MARINE SEISMIC DATA PROCESSING BY USING SEISMIC UNIX: PART- 2: TRACE EDITING

DESCRIPTION:
Before setting geometry, applying signal enhancement, and further processing, it is necessary to edit the incorrect traces and to kill bad traces. If any, the content of incorrect polarity and bad traces can be obtained from observer log or done manually from trace display observation.

The objective of trace editing is to correct bad traces to be good traces. In this stage, we will eliminate the “misfire” records, delete auxiliary traces, reverse incorrect trace polarity (if any), and kill dead traces (if any) from previously processed data. Thus, we may obtain decent data to be used for the next processing stage.

Author : Henry Mulana Nainggolan
Date    : May 4th, 2014

BASIC THEORY:
Seismic trace represents the signal as the response of the elastic wavefield to velocity and density contrasts across interfaces of sediments as energy (seismic wave), travels from a source (air gun) through subsurface to receiver. 
 
Figure-1.Simple schematic of seismic acquisition. A seimic trace generated by convolving a source wavelet from the airguns (towed by the ship) with observed seismic time series (reflectivity) recorded by a towed hydrophone array.
 

The reflection signals are impulses with amplitudes equal to reflection coefficients of the horizons and to their two-way reflection times. Ideally, the convolutional model states that all seismic traces are the result of convolving (summing) the source wavelet with the reflection coefficient series. Vice versa, the seismic processing procedure designed to compress the source wavelet to the desired wavelet is deconvolution. More details could be done on Gadallah and Fisher (2009), “Exploration Geophysics” or Steven Henry (1997), “Catch the (Seismic) Wavelet”.
 

Let the input pulse or source wavelet be denoted by w(t) and the impulse response of the earth denoted by r(t); the convolutional model is adopted to describe the response at the hydrophone s(t) with the expression: s(t) = w(t) * r(t).
Figure-2.Convolutional model between input signature (source wavelet) with reflectivity to describe a seismic trace.
However, a seismic trace as the convolution of the input signature with the reflectivity function of the earth impulse response, including source signature, recording filter, surface reflections, and hydrophone response has primary reflections (signals), multiples, and all types of noise. Signals are  flowers, while noises are weeds.

Seismic trace can be described equally well as time series (amplitude vs. time), amplitude spectrum (amplitude vs. frequency), and phase spectrum (phase vs. frequency). A wavelet is a term used to describe a short time series which can be used to represent the source function in the time domain or in the frequency domain as an amplitude or phase spectrum.
Figure-3.Time and frequency domain of seismic trace, a. time domain wavelet, b. amplitude spectrum, and c.phase spectrum. Courtesy Gadallah and Fisher (2009), “Exploration Geophysics”.


The dominant period (τc) of the response corresponds to the time from one peak to the next or from one trough to the next. The reciprocal of this dominant period is a measure of the dominant frequency (fc) of the signal or wavelet spectrum (fc=1/τc). The reciprocal of the half-width of the response-envelop (τB) provides an estimate of the bandwidth (fB) of the signal spectrum (fB=1/τB).

Figure-4.Dominant bandwidth and frequency dominant of frequency spectra. Courtesy Hilterman, 1985.


Phase is a description of the motion of, or means of comparison of, periodic waves such as seismic waves, described by the angular difference between them, such as, “180 degrees out of phase” (R.E. Sheriff, Encyclopedic Dictionary of Exploration Geophysics).

Minimum-phase wavelet has the maximum amount of energy in first peak or trough and wavelet starts at the boundary. While zero-phase is symmetric wavelet and has maximum energy at boundary. Commonly practised in seismic exploration, non-zero-phase wavelets are converted to zero-phase wavelets to achieve the best resolution on the seismic data. That is why we go for minimum phase wavelet and during processing it can be converted into zero phase.
Figure-5.Minimum phase wavelet with frequency spectrum and phase spectrum (Top), Zero phase wavelet with frequency spectrum and phase spectrum (Bottom).


Phase reversal is a phase shift of 180 degrees, so that a peak becomes a trough and vice-versa  (definied by R.E. Sheriff, Encyclopedic Dictionary of Exploration Geophysics).

Figure-6.Phase rotation of a zero phase (00 of phase) wavelet showing phase reversal while rotated 1800.

Polarity is the way in which seismic trace data is recorded and displayed. There are two types of wavelet polarity, they are normal polarity and reverse polarity. Reverse polarity can also be described as shifted of 180 degrees from normal polarity. A polarity standard, enunciated by the SEG is normal polarity. Polarity standards are not specified for wavelets other than minimum-phase or zero-phase wavelet.

Figure-7.SEG standard wavelet polarity (Sheriff, 2001)


Polarity of reflected wave depends on sign of reflection coefficient. Polarity can be checked by observing the nature of the reflection from an reflection coefficient (RC).

 
The seabed reflector can be a good polarity indicator. SEG normal polarity has compressional waves from positive reflection coefficient (+RC boundaries) recorded as negative number on tape (storage) and displayed as central peak for zero phase wavelet.

Adopted by the SEG, polarity reversal (dim spot) or phase change is a local amplitude seismic attribute anomaly that can indicate the presence of hydrocarbons and is therefore known as a direct hydrocarbon indicator (DHI). This changes the acoustic impedance contrast from an increase to a decrease, resulting in the polarity of the seismic response being reversed.
INPUT & OUTPUT DATA:
INDATA    : raw data in SU format  (data_raw.su )
OUTDATA    : edited data in SU format (data_edit.su)

COMMANDS & PARAMETERS:

The trace editing steps are:
* Put the data input (e.g., data_raw.su) and source code 02.edit.sh into project directory.

* Open the source code 02.edit.sh by using text editor in Red Hat Linux or Ubuntu.
* Set DATADIR for project directory (line-7), in where the seismic datasets are located.
* Define INDATA and OUTDATA (line-10 & 11).
* Run the command in terminal: sh 02.edit.
* The terminal will have two choices: 1. Do killing bad records and 2. Don't kill bad records. Type 1 to kill bad records (fldr).
* Insert the first and last good record (fldr) numbers to be used. Apart of this range will be deleted.
* The process will automatically deleted auxiliary traces by setting minimum trid=1.
* Then the terminal will have two choices: 1. Do editing the reversed trace polarity and 2. Don’t edit the reversed trace polarity. Type 1 if we want to edit reversed trace polarity.
* Insert a trace numbers (tracf) to edit the reversed trace polarity.
* The final step, the terminal will have two choices: 1.Kill bad trace and 2. Don’t kill bad trace. Type 1 if we want to kill bad records.
* Insert a trace number (tracf) that are going to be killed, then insert number (amount) of trace.

 

The mandatory SU commands with required parameters in source code 02.edit.sh are as follow. 
suwind < $INDATA key=fldr min=$fldr_start max=$fldr_end > junk1.su
SU command to select minimum and maximum field record with a keyword “fldr” from an input data (INDATA). This command is used to rejected the bad records in outside of parameters minimum fldr ($fldr_start) maximum fldr ($fldr_end). The ouput of this command is junk1.su, then will be used into next process.
suwind < junk1.su key=trid min=1 > junk2.su
SU command to select minimum trace identification code with a keyword “trid”  from input data junk1.su. This command is used to deleted the auxiliary traces by setting minimum trid=1 to the output data junk2.su.
suwind < junk2.su key=tracf max=0 accept=$revtrace > junk3.su
SU command to select trace number with a keyword “tracf”from data junk2.su. The parameter “accept=$revtrace” means that only reversed trace polarity or $revtrace from tracf will be taken as output data junk3.su.
suop < junk3.su op=neg > junk4.su
SU command to change the reversed trace with a arithmetic operation “op=neg” from reversed trace polarity (junk3.su) . The parameter “op=neg” multiplies -1 to the reversed trace data, thus the polarity will be changed to the output data junk4.su.
suwind < junk2.su key=tracf reject=$revtrace > junk5.su
SU command to select trace number with a keyword “tracf”from data junk2.su. The parameter “reject=$revtrace” means that apart of the reversed trace polarity or $revtrace from tracf will be taken as good traces for the output data junk5.su.
cat junk5.su junk4.su > junk6.su
A command to combine good traces junk5.su with edited trace junk4.su into junk6.su.
susort < junk6.su fldr tracf > junk7.su
SU command to sort trace with first keyword “fldr” and second keyword “tracf”. This command is used to sort field record (fldr) of data junk6.su into ascending order to the ouput data junk7.su.
suwind < junk7.su key=tracf max=0 accept=$killtrace > junk8.su
SU command to select trace number with a keyword “tracf”from data junk8.su. The parameter “accept=$killtrace” means that only bad trace(s) or $killtrace from tracf will be taken as output data junk8.su.
sukill < junk8.su min=1 count=$ntrace > junk9.su
SU command to kill selected bad trace(s) from data junk8.su. Parameter “count=$ntrace” means the number of trace(s) or how many trace(s) that are going to be killed.
suwind < junk7.su key=tracf reject=$killtrace > junk10.su
SU command to select trace number with a keyword “tracf”from data junk7.su. The parameter “reject=$killtrace” means that apart of the bad trace(s) or $killtrace from tracf will be take as good traces for output data junk10.su.
cat junk10.su junk9.su > junk11.su
A command to combine good traces junk10.su with edited trace junk9.su into junk11.su.
susort < junk11.su fldr tracf > $OUTDATA
SU command to sort trace with first keyword “fldr” and second keyword “tracf”. This command is used to sort field record (fldr) from data junk11.su into ascending order with ouput data OUTDATA.
Below are additional SU commands with required parameters in source code 02.edit.sh.
fldr_start=`sugethw < $INDATA output=geom key=fldr | sort -n | head -1 | awk '{print $1}'`
SU command to get original field record numbers defined by key word “fldr” in geom or ASCII output (not binary), all values are normal sorted (min-max), then a first value is selected and written as a first field record number.
fldr_end=`sugethw < $INDATA output=geom key=fldr | sort -n | tail -1 | awk '{print $1}'`
SU command to get original field record numbers defined by key word “fldr” in geom or ASCII output (not binary), all values are normal sorted (min-max), then a last value is selected and written as a last field record number.
mintracf=`sugethw < $INDATA output=geom key=tracf | sort -n | head -1 | awk '{print $1}'`
SU command to get trace numbers defined by key word “tracf” in geom or ASCII output (not binary), all values are normal sorted (min-max), then a first value is selected and written as a first trace number.
maxtracf=`sugethw < $INDATA output=geom key=tracf | sort -n | tail -1 | awk '{print $1}'`
SU command to get trace numbers defined by key word “tracfr” in geom or ASCII output (not binary), all values are normal sorted (min-max), then a last value is selected and written as a last trace number.

surange < $OUTDATA

SU command to get minimum and maximum range for trace header values of output data (OUTDATA). This SU command is very necessary to view QC output data and to compare or to view changes from input data with output data. Therefore, this will be used for every processing stage in Seismic Unix.

Note: ` is different type with '.

PRINT OUT:
Figure-8.FFID 98-101 showing raw data from near field records which consist of 3 “misfire” records (FFID 98-100) and 2 auxiliary traces per record.
Figure-9.FFID 101-104 showing edited data from near field records after editing (deleted “misfire” FFID 98-100 and 2 auxiliary traces per record).
Figure-10.FFID 2189-2192 showing raw data from far field records which consist of 3 “misfire” records (FFID 2190-2192) and 2 auxiliary traces per record.
Figure-11.FFID 2186-2189 showing edited data from far field records after editing (deleted “misfire” FFID 2190-2192 and 2 auxiliary traces per record).




200544 traces:
tracl      297 205016 (297 - 205016)
tracr      297 205016 (297 - 205016)
fldr       101 2189 (101 - 2189)
tracf      1 96 (1 - 96)
ep         101 2189 (101 - 2189)
cdpt       3 98 (3 - 98)
trid       1
nhs        1
ns         3201
dt         1000
gain       3
afilf      400
afils      370
lcf        5
hcf        400
lcs        12
hcs        370
year       2013
 
Number of trace per record has been changed to be 96 traces (tracf=1 to 96), without the auxiliary traces. Number of record has also been changed to be 2089 (fldr=101 to 2189), that without “misfire” records (fldr=98,99,100,2189,2191, and 2192). No reversed trace(s) polarity and bad trace(s) within this data. Therefore, total number of Trace Data within this data is 200544, equals with number of record (2089) x number of trace per record (96). These are suitable with parameter of survey design.

Source coordinates (sx & sy), group coordinates (gx & gy), scalar coordinate (scalco), coordinate unit (counit), and cdp will be computed in next processing stage (Part3: Geometry Setting, *will be continued soon*). 


SOURCE CODE:

#!/bin/sh
# filename: 02.edit.sh
# KILL AUXILIARY (SOURCE SIGNATURE), EDIT REVERSE POLARITY & KILL BAD TRACE (IF ANY)
# Created by geophenry124

# Set directory
DATADIR=/media/Data/data/marine

# Define input-output data
INDATA=$DATADIR/data_raw.su
OUTDATA=$DATADIR/data_edit.su

# PROCESS 2: TRACE EDIT
echo "PROCESS 2: TRACE EDIT"
echo ""
printf "Job started `todays_date` at `time_now` \n"
echo ""
#===============================================================================
# View range of header values
echo "Range of header values for $INDATA:"
surange < $INDATA
echo ""

# Get header info
echo "Check the first field record..."
fldr_start=`sugethw < $INDATA output=geom key=fldr | sort -n | head -1 | awk '{print $1}'`
echo "First field file id (FFID) = $fldr_start"

echo "Check the last field record..."
fldr_end=`sugethw < $INDATA output=geom key=fldr | sort -n | tail -1 | awk '{print $1}'`
echo "Last field file id (FFID) = $fldr_end"

nshot=`bc -l <<END
        $fldr_end - $fldr_start + 1
END`
echo "Number of FFID = $nshot"
echo ""

# Set field record number (min-max) to view QC of the first & last FFID
min1=$fldr_start
max1=`bc -l <<END
        $min1 + 3
END`

min2=`bc -l <<END
        $fldr_end - 3
END`
max2=$fldr_end

# Checking near and far trace
echo "Checking near and far trace..."
mintracf=`sugethw < $INDATA output=geom key=tracf | sort -n | head -1 | awk '{print $1}'`
echo "Near trace = $mintracf"
maxtracf=`sugethw < $INDATA output=geom key=tracf | sort -n | tail -1 | awk '{print $1}'`
echo "Far trace = $maxtracf"
echo ""

# Display QC field record before editing
suwind < $INDATA key=fldr min=$min1 max=$max1 | suxwigb perc=95 label1="Time (s)" \
label2="Trace No." windowtitle="QC FFID $min1-$max1-Before Editing" \
title="QC FFID $min1-$max1-Before Editing" &
suwind < $INDATA key=fldr min=$min2 max=$max2 | suxwigb perc=95 label1="Time (s)" \
label2="Trace No." windowtitle="QC FFID $min2-$max2-Before Editing" \
title="QC FFID $min2-$max2-Before Editing" &

# Print out QC field record before editing
suwind < $INDATA key=fldr min=$min1 max=$max1 | supswigb perc=95 label1="Time (s)" \
label2="Trace No." title="Raw Data-FFID $min1-$max1" wbox=20 hbox=15 \
verbose=0 > 02.Editing-QC_First_Shot_Before_Editing.eps &
suwind < $INDATA key=fldr min=$min2 max=$max2 | supswigb perc=95 label1="Time (s)" \
label2="Trace No." title="Raw Data-FFID $min2-$max2" wbox=20 hbox=15 \
verbose=0 > 02.Editing-QC_Last_Shot_Before_Editing.eps &

#===============================================================================
# STEP 1: KILL BAD RECORDS & AUXILIARY TRACES (SOURCE SIGNATURES)
echo "STEP 1: KILL AUXILIARY TRACES (SOURCE SIGNATURES) & BAD RECORDS"
echo ""
echo "Please select: Do or Don't kill bad records"
option=
echo "Choose option:"
echo "1. Do killing bad records"
echo "2. Don't kill bad records"
echo "*press Enter to exit*"
echo -n "Insert the option (1 or 2):"
read option
case $option in
                     "1") echo "Your option is: Do killing bad records"
                          echo ""
                          echo "Please select the first and last FFID (good records) to be used"
                          fldr_start=
                          echo "Insert first FFID:"
                          echo -n "First FFID:"
                          read fldr_start
                          fldr_end=
                          echo "Insert last FFID:"
                          echo -n "Last FFID:"
                          read fldr_end
                          echo ""                       
                         
                          echo "Kill the bad field file id (FFID)...."
                          # Kill the bad field file id (FFID)
                          suwind < $INDATA key=fldr min=$fldr_start max=$fldr_end > junk1.su
                         ;;
                     "2") echo "Your option is: Don't kill bad records"
                          mv $INDATA junk1.su ;; 
                     *)   exit 1 ;;
esac
echo ""

echo "Checking source signature (auxiliary trace)...."
# Kill source signature (auxiliary trace)
echo "Process to kill source signature (auxiliary trace), please wait..."
suwind < junk1.su key=trid min=1 > junk2.su
echo "Source signatures (auxiliary traces) have been deleted..."
echo ""

# View a new range of header values
echo "Range of new header values:"
surange < junk2.su
echo ""

# Get new header info
echo "Check the new first field record..."
fldr_start=`sugethw < junk2.su output=geom key=fldr | sort -n | head -1 | awk '{print $1}'`
echo "New first field file id (FFID) = $fldr_start"

echo "Check the new last field record..."
fldr_end=`sugethw < junk2.su output=geom key=fldr | sort -n | tail -1 | awk '{print $1}'`
echo "New last field file id (FFID) = $fldr_end"

nshot=`bc -l <<END
        $fldr_end - $fldr_start + 1
END`
echo "New number of FFID = $nshot"
echo ""

# Set the new field record number (min-max) to view QC of the first & last FFID
min1=$fldr_start
max1=`bc -l <<END
        $min1 + 3
END`

min2=`bc -l <<END
        $fldr_end - 3
END`
max2=$fldr_end

# Display QC field record after killing bad records & source signatures (auxiliary trace)
echo "Display QC field record after killing bad records & source signatures (auxiliary trace)..."
suwind < junk2.su key=fldr min=$min1 max=$max1 | suxwigb perc=95 label1="Time (s)" \
label2="Trace No." windowtitle="QC FFID $min1-$max1" \
title="QC FFID $min1-$max1-After Killing Bad Records & Source Signatures" &
suwind < junk2.su key=fldr min=$min2 max=$max2 | suxwigb perc=95 label1="Time (s)" \
label2="Trace No." windowtitle="QC FFID $min2-$max2" \
title="QC FFID $min2-$max2-After Killing Bad Records & Source Signatures" &

echo ""
echo "Finish..."
#===============================================================================
# STEP 2: EDIT THE REVERSE POLARITY TRACE
echo ""
echo "STEP 2: EDIT THE REVERSE POLARITY TRACE"
echo ""
echo "Please select: Do or Don't edit the reversed polarity trace"
option=
echo "Choose option:"
echo "1. Do editing the reversed polarity trace"
echo "2. Don't edit the reversed polarity trace"
echo "*press Enter to exit*"
echo -n "Insert the option (1 or 2):"
read option
case $option in
                     "1") echo "Your option is: Do editing the reversed polarity trace"
                          echo ""
                          echo "*Define trace number(tracf) that are going to be reversed*"
                          revtrace=
                          echo "Please insert trace number(tracf) that are going to be reversed"
                          echo -n "Trace number(tracf):"
                          read revtrace
                          echo "Trace number(tracf):$revtrace is going to be reversed"                                                                
                                             # Select traces that are going to be reversed
                                             echo "Correcting the reversed polarity trace $revtrace, please wait..."
                                             suwind < junk2.su key=tracf max=0 accept=$revtrace > junk3.su

                                             # Correct reversed traces
                                             suop < junk3.su op=neg > junk4.su

                                             # Select traces that are NOT going to be reversed
                                             suwind < junk2.su key=tracf reject=$revtrace > junk5.su

                                             # Combine and sort good and corrected traces
                                             cat junk5.su junk4.su > junk6.su
                                             susort < junk6.su fldr tracf > junk7.su

                                             # Display QC shot gathers after editing the reversed polarity trace
                                             echo "Display QC shot before & after editing the reversed polarity trace.."
                                             suwind < junk7.su key=fldr min=$min1 max=$max1 | suxwigb perc=95 \
                                             label1="Time (s)" label2="Trace No."\
                                             windowtitle="Corrected Reverse Polarity Trace $revtrace" \
                                             title="FFID $min1-$max1" &
                                            
                                             # Housekeeping
                                             rm junk1.su junk2.su junk3.su junk4.su junk5.su junk6.su ;;
                     "2") echo "Your option is: Don't edit the reversed polarity trace"
                             mv junk2.su junk7.su ;; 
                     *)   exit 1 ;;
esac

# View a new range of header values
echo "Range of new header values:"
surange < junk7.su
echo "Finish..."

#===============================================================================
# STEP 3: KILL BAD TRACE
echo ""
echo "STEP 3: KILL BAD TRACE"
echo ""
echo "Please select: Do or Don't kill bad trace"
option=
echo "Choose option:"
echo "1. Kill bad trace"
echo "2. Don't kill bad trace"
echo "*press Enter to exit*"
echo -n "Insert the option (1 or 2):"
read option
case $option in
                     "1") echo "Your option is: Kill bad trace"
                          echo ""
                          echo "*Define trace number(tracf) that are going to be killed*"
                          killtrace=
                          echo "Please insert trace number(tracf) that are going to be killed"
                          echo -n "Trace number(tracf):"
                          read killtrace
                          echo "Please insert amount of trace (1-$nshot) that are going to be killed"          
                          ntrace=
                          echo -n "Amount of trace (1-$nshot):"
                          read ntrace
                          echo "$ntrace of trace number(tracf):$killtrace is/are going to be killed"                                                             
                                             # Select traces that are going to be killed
                                             echo "Killing bad trace $killtrace, please wait..."
                                             suwind < junk7.su key=tracf max=0 accept=$killtrace > junk8.su

                                             # Kill bad traces
                                             sukill < junk8.su min=1 count=$ntrace > junk9.su

                                             # Select traces that are NOT going to be killed
                                             suwind < junk7.su key=tracf reject=$killtrace > junk10.su

                                             # Combine and sort good and killed traces
                                             cat junk10.su junk9.su > junk11.su
                                             susort < junk11.su fldr tracf > $OUTDATA

                                             # Display QC shot gathers after killing bad trace
                                             echo "Display QC shot gathers before & after killing bad trace.."
                                             suwind < $OUTDATA key=fldr min=$min1 max=$max1 | suxwigb perc=95 \
                                             label1="Time (s)" label2="Trace No." \
                                             windowtitle="Killed $ntrace of Bad Trace $killtrace" \
                                             title="FFID $min1-$max1" &
                                             # Housekeeping
                                             rm junk7.su junk8.su junk9.su junk10.su junk11.su ;;
                     "2") echo "Your option is: Don't Don't kill bad trace"
                             mv junk7.su $OUTDATA ;; 
                     *)   exit 1 ;;
esac
echo ""

# View a new range of header values
echo "Range of header values for $OUTDATA :"
surange < $OUTDATA
echo ""

# Print out QC field record before editing
suwind < $OUTDATA key=fldr min=$min1 max=$max1 | supswigb perc=95 label1="Time (s)" \
label2="Trace No." title="Raw Data-FFID $min1-$max1" wbox=20 hbox=15 \
verbose=0 > 02.Editing-QC_First_Shot_After_Editing.eps &
suwind < $OUTDATA key=fldr min=$min2 max=$max2 | supswigb perc=95 label1="Time (s)" \
label2="Trace No." title="Raw Data-FFID $min2-$max2" wbox=20 hbox=15 \
verbose=0 > 02.Editing-QC_Last_Shot_After_Editing.eps &

printf "Job finished `todays_date` at `time_now` \n"
echo "Finish..."
#===============================================================================
echo ""
echo "NEXT PROCESS: GEOMETRY SETTING"

exit



0 comments:

Post a Comment

Jokes

Review

Election Polling

Who are the president and vice president of Indonesia Republic of your choice?
  
 

Orang yang bersemangat dapat menanggung penderitaannya, tetapi siapa yang akan memulihkan semangat yang patah?” Amsal 18:14.

Beragam persoalan bisa menimpa siapa saja. Entah orang kaya atau miskin, tua atau muda, setiap orang selama hidup di dunia ini selalu berhadapan dengan berbagai persoalan. Setiap orang, terlepas dari status sosial, pendidikan, profesinya, dan bahkan sebagai hamba Tuhanpun tidak terluput dari yang namanya pergumulan atau persoalan. Manusia harus berhadapan dengan masalah selama hidup di dunia ini. Setiap orang tentunya memiliki persoalan yang berbeda-beda.

Kita tidak boleh menyerah, walau badai apapun yang sedang menerpa. Sebab pencobaan yang kita alami tidak pernah melebihi kekuatan kita, seperti yang disebutkan dalam Firman Tuhan.

“Pencobaan-pencobaan yang kamu alami ialah pencobaan-pencobaan biasa, yang tidak melebihi kekuatan manusia. Sebab Allah setia dan karena itu Ia tidak akan membiarkan kamu dicobai melampaui kekuatanmu. Pada waktu kamu dicobai Ia akan memberikan kepadamu jalan keluar, sehingga kamu dapat menanggungnya.Amin.” 1 Kor 10:13.

 
About | Disclaimer | Sitemap | Contact | Copyright © 2011 TotalCorner
Valid XHTML and CSS