public MortgageLoan(double Balance_, int LoanMaturity_, double loanRate_, LiborRates LiborRate_Array_, IRepayment rep_)
        {
            this.rep         = rep_;
            this.Libor_Curve = LiborRate_Array_;

            this.Balance            = Balance_;
            this.Loan_Maturity      = LoanMaturity_;
            this.Loan_Rate          = loanRate_;
            this.Original_Loan_Rate = loanRate_;

            Beg_Balance       = new double[GlobalVar.GlobalMaxMortgageLoanMaturity];
            End_Balance       = new double[GlobalVar.GlobalMaxMortgageLoanMaturity];
            Principal_Payment = new double[GlobalVar.GlobalMaxMortgageLoanMaturity];
            Interest_Payment  = new double[GlobalVar.GlobalMaxMortgageLoanMaturity];
            Cash_Collections  = new double[GlobalVar.GlobalMaxMortgageLoanMaturity];
        }
 public MortgageLoanFixed(double Balance_, int LoanMaturity_, double loanRate_, int NextRepricing_, double spread_,
                          LiborRates LiborRate_Array_, IRepayment rep_) :
     base(Balance_, LoanMaturity_, loanRate_, LiborRate_Array_, rep_)
 {
 }
        private double spread;          // loan spread over Libor rate

        public MortgageLoanARM(double Balance_, int LoanMaturity_, double loanRate_, int NextRepricing_, double spread_, LiborRates LiborRate_Array_, IRepayment rep_) :
            base(Balance_, LoanMaturity_, loanRate_, LiborRate_Array_, rep_)
        {
            this.NextRepricing = NextRepricing_;
            this.spread        = spread_;
        }