public void SaveToBinFile(string FileName, bool TextFileInstead)
        {
            int i, j;
            CBehavior srcBeh;
            CSpan behTransRef;
            mbsSPECIESMODEL speMdl = new mbsSPECIESMODEL(); // from the wrapper class project
            m_needSave = false;
            

            ///////////////////////////////////////////////////////////////
            //----------------------//
            // Acoustic Aversion
            // 39 parameters
            //----------------------//
            speMdl.acousticAversion.ascentRateAffected = CUtil.BooleanToInt(m_acAvrsn.ascentEnabled);
            speMdl.acousticAversion.ascentRate.coeff = m_acAvrsn.ascent.coeff;
            speMdl.acousticAversion.ascentRate.mean = m_acAvrsn.ascent.mean;
            speMdl.acousticAversion.ascentRate.std = m_acAvrsn.ascent.std;
            speMdl.acousticAversion.descentRateAffected = CUtil.BooleanToInt(m_acAvrsn.descentEnabled);
            speMdl.acousticAversion.descentRate.coeff = m_acAvrsn.descent.coeff;
            speMdl.acousticAversion.descentRate.mean = m_acAvrsn.descent.mean;
            speMdl.acousticAversion.descentRate.std = m_acAvrsn.descent.std;
            speMdl.acousticAversion.beaches = CUtil.BooleanToInt(m_acAvrsn.beachingEnabled);
            speMdl.acousticAversion.beachingDepth = m_beachingDepth;
            speMdl.acousticAversion.depth.coeff = -1; // Not used by depth model.
            speMdl.acousticAversion.depth.mean = m_acAvrsn.depth.mean;
            speMdl.acousticAversion.depth.std = m_acAvrsn.depth.std;
            speMdl.acousticAversion.depthAffected = CUtil.BooleanToInt(m_acAvrsn.depthEnabled);
            speMdl.acousticAversion.flatBottomDiveAffected = CUtil.BooleanToInt(m_acAvrsn.flatBottomDivingEnabled);
            speMdl.acousticAversion.flatBottomDives = CUtil.BooleanToInt(m_acAvrsn.flatBottomDives);
            speMdl.acousticAversion.podBreaksUp = CUtil.BooleanToInt(m_aePodBreaksApart);
            speMdl.acousticAversion.reversal.count.coeff = -1;// Not used by depth model.
            speMdl.acousticAversion.reversal.count.mean = m_acAvrsn.reversal.meanCnt;
            speMdl.acousticAversion.reversal.count.std = m_acAvrsn.reversal.stdCnt;
            speMdl.acousticAversion.reversal.probOfReversal = m_acAvrsn.reversal.prob;
            speMdl.acousticAversion.reversal.time.coeff = -1;// Not used by depth model
            speMdl.acousticAversion.reversal.time.mean = m_acAvrsn.reversal.meanTime;
            speMdl.acousticAversion.reversal.time.std = m_acAvrsn.reversal.stdTime;
            speMdl.acousticAversion.reversalAffected = CUtil.BooleanToInt(m_acAvrsn.reverseEnabled);
            speMdl.acousticAversion.surfaceInterval.coeff = -1;// Not used by depth model
            speMdl.acousticAversion.surfaceInterval.mean = m_acAvrsn.surfaceInterval.mean;
            speMdl.acousticAversion.surfaceInterval.std = m_acAvrsn.surfaceInterval.std;
            speMdl.acousticAversion.surfaceIntervalAffected = CUtil.BooleanToInt(m_acAvrsn.srfIntvlEnabled);
            speMdl.acousticAversion.travel.arcStep = m_acAvrsn.direction.arcStep;
            speMdl.acousticAversion.travel.bias = m_acAvrsn.direction.bias;
            speMdl.acousticAversion.travel.directionOfBias = m_acAvrsn.direction.biasDir;
            speMdl.acousticAversion.travel.perturbation = m_acAvrsn.direction.pert;
            speMdl.acousticAversion.travel.termCoeff = m_acAvrsn.direction.coeff;
            speMdl.acousticAversion.travelDirectionAffected = CUtil.BooleanToInt(m_acAvrsn.directnEnabled);
            speMdl.acousticAversion.travelRate.coeff = m_acAvrsn.rate.coeff;
            speMdl.acousticAversion.travelRate.mean = m_acAvrsn.rate.mean;
            speMdl.acousticAversion.travelRate.std = m_acAvrsn.rate.std;
            speMdl.acousticAversion.travelRateAffected = CUtil.BooleanToInt(m_acAvrsn.rateEnabled);


            //----------------------------------------------------------------------------------//
            // Species Description
            // 7 parameters: 3mbs lib version, species version, species group, short description,
            //				 long comment, shore following depth, and number of behaviors
            //----------------------------------------------------------------------------------//
            speMdl.speciesGroup = m_groupIndex;
            speMdl.szSpeciesShrtDscrptn = m_shortDescription;
            speMdl.szSpeciesLongComment = m_longComment;
            speMdl.shoreFollowDepth = shoreFollowDepth;
            speMdl.minSeedDepth = seedMinDepth;
            speMdl.deepWaterSeedingDepth = m_seedingDepthLimit;

            if(m_seedingDepthLimitEnabled == false)
                speMdl.deepWaterSeedingDepthEnabled = 0;
            else
                speMdl.deepWaterSeedingDepthEnabled = 1;

            speMdl.behaviorCount = m_behMgr.Count;

            speMdl.speciesName = m_speciesIndex;


            // These can only be loaded in, not saved, and get reset at the end of this function.
            //speMdl.year = m_year;
            //speMdl.month = m_month;
            //speMdl.day = m_day;
            //speMdl.sec = m_sec;
            //speMdl.id = m_id;


            //---------------------//
            // Initial Behavior
            //---------------------//
            //speMdl.initialBehavior = CUtil.CopyMatrix(m_initialBehavior);
            speMdl.initBehSpanCnt = m_initBehSpanMgr.SpanCount;
            speMdl.initialBehavior = new mbsBEHTRAN[speMdl.initBehSpanCnt];
            for(j=0; j<speMdl.initBehSpanCnt; j++)
            {
                behTransRef = m_initBehSpanMgr.GetSpan(j);
                speMdl.initialBehavior[j].depthSpan.shallow = behTransRef.shallow;
                speMdl.initialBehavior[j].depthSpan.deep = behTransRef.deep;
                speMdl.initialBehavior[j].m = CUtil.CopyMatrix(behTransRef.behTrans.matrix);
            }

            //---------------------------------------------------------------//
            // Behavior Allocation
            // 2 parameters including the dyanically allocated behavior array
            //---------------------------------------------------------------//
            speMdl.behavior = new mbsNRMLBEHMDL[speMdl.behaviorCount];
            for(i=0; i<speMdl.behaviorCount; i++)
            {
                // keep the lines short.
                srcBeh = m_behMgr.GetBehavior(i);

                //------------------//
                // Behavior Name
                //------------------//
                speMdl.behavior[i].szName = srcBeh.name;

                //-------------------------------------//
                // Environmental Attractor Priority
                //-------------------------------------//
                if(srcBeh.envInfPriority == ENVATTRACTORPRIORITY.DIVE)
                    speMdl.behavior[i].depthHasPriorityOverTemp = 1;
                else
                    speMdl.behavior[i].depthHasPriorityOverTemp = 0;


                //----------------------------------------//
                // Depth environmental attractor
                // 8 parameters, including 2 vector models
                //----------------------------------------//
                speMdl.behavior[i].depthEnvAtt.shelfIsEnabled = CUtil.BooleanToInt(srcBeh.envAttrDepth.shelfEnabled);
                speMdl.behavior[i].depthEnvAtt.shelfDepth = srcBeh.envAttrDepth.shelfDepth;
                speMdl.behavior[i].depthEnvAtt.shelfSlope = srcBeh.envAttrDepth.shelfSlope;

                speMdl.behavior[i].depthEnvAtt.basinIsEnabled = CUtil.BooleanToInt(srcBeh.envAttrDepth.basinEnabled);
                speMdl.behavior[i].depthEnvAtt.basinDepth = srcBeh.envAttrDepth.basinDepth;
                speMdl.behavior[i].depthEnvAtt.basinSlope = srcBeh.envAttrDepth.basinSlope;

                speMdl.behavior[i].depthEnvAtt.slopeIsEnabled = CUtil.BooleanToInt(srcBeh.envAttrDepth.slopeEnabled);
                speMdl.behavior[i].depthEnvAtt.slopeDepth = srcBeh.envAttrDepth.slopeDepth;
                speMdl.behavior[i].depthEnvAtt.slopeSlope = srcBeh.envAttrDepth.slopeSlope;

                speMdl.behavior[i].depthEnvAttBehTrans.behavior = CUtil.CopyMatrix(srcBeh.depthBehTrans.vector);
                speMdl.behavior[i].depthEnvAttBehTrans.terminate = CUtil.CopyMatrix(srcBeh.depthBehTrans.element);

                speMdl.behavior[i].depthEnvAttBehTrans.meanTimeInBeh = srcBeh.depthBehTrans.meanTimeInBehMinuites;
                speMdl.behavior[i].depthEnvAttBehTrans.slopeCoefficient = srcBeh.depthBehTrans.slopeCoeff_goesAway;


                //-----------------------------------------//
                // Temperature Environmental Attractor
                // 8 parameters, including 2 vector models
                //-----------------------------------------//
                speMdl.behavior[i].tempEnvAtt.delta = srcBeh.envAttrTemp.front;
                speMdl.behavior[i].tempEnvAtt.deltaIsEnabled = CUtil.BooleanToInt(srcBeh.envAttrTemp.frontEnabled);
                speMdl.behavior[i].tempEnvAtt.max = srcBeh.envAttrTemp.warm;
                speMdl.behavior[i].tempEnvAtt.maxIsEnabled = CUtil.BooleanToInt(srcBeh.envAttrTemp.coldEnabled);
                speMdl.behavior[i].tempEnvAtt.min = srcBeh.envAttrTemp.cold;
                speMdl.behavior[i].tempEnvAtt.minIsEnabled = CUtil.BooleanToInt(srcBeh.envAttrTemp.warmEnabled);
                speMdl.behavior[i].tempEnvAttBehTrans.behavior = CUtil.CopyMatrix(srcBeh.temperatureBehTrans.vector);
                speMdl.behavior[i].tempEnvAttBehTrans.terminate = CUtil.CopyMatrix(srcBeh.temperatureBehTrans.element);

                speMdl.behavior[i].tempEnvAttBehTrans.meanTimeInBeh = srcBeh.temperatureBehTrans.meanTimeInBehMinuites;
                speMdl.behavior[i].tempEnvAttBehTrans.slopeCoefficient = srcBeh.temperatureBehTrans.slopeCoeff_goesAway;


                //-----------------------------------------//
                // Travel Direction
                // 12 parameters, including 3 vector models
                //-----------------------------------------//
                speMdl.behavior[i].travelDirection.modelType = (mbsDIRECTIONAL_MODEL_TYPE)srcBeh.direction.type;
                speMdl.behavior[i].travelDirection.crRndWalk.perturbation = srcBeh.direction.correlatedRndmWalk.pert;
                speMdl.behavior[i].travelDirection.crRndWalk.termCoeff = srcBeh.direction.correlatedRndmWalk.coeff;
                speMdl.behavior[i].travelDirection.crRndWalkDb.arcStep = srcBeh.direction.correlatedRndmWalkDirBias.arcStep;
                speMdl.behavior[i].travelDirection.crRndWalkDb.bias = srcBeh.direction.correlatedRndmWalkDirBias.bias;
                speMdl.behavior[i].travelDirection.crRndWalkDb.directionOfBias = srcBeh.direction.correlatedRndmWalkDirBias.biasDir;
                speMdl.behavior[i].travelDirection.crRndWalkDb.perturbation = srcBeh.direction.correlatedRndmWalkDirBias.pert;
                speMdl.behavior[i].travelDirection.crRndWalkDb.termCoeff = srcBeh.direction.correlatedRndmWalkDirBias.coeff;
                speMdl.behavior[i].travelDirection.rndWalk.termCoeff = srcBeh.direction.rndmWalk.coeff;
                speMdl.behavior[i].travelDirection.vm.direction = CUtil.CopyMatrix(srcBeh.direction.matrix.directionVector);
                speMdl.behavior[i].travelDirection.vm.directionalBias = CUtil.CopyMatrix(srcBeh.direction.matrix.directionBiasMatrix);
                speMdl.behavior[i].travelDirection.vm.terminate = CUtil.CopyMatrix(srcBeh.direction.matrix.term);

                //-----------------------------------------//
                // Travel Rate
                // 10 parameters, including 3 vector models
                //-----------------------------------------//
                speMdl.behavior[i].travelRate.modelType = (mbsSTANDARD_MODEL_TYPE)srcBeh.rate.modelType;
                speMdl.behavior[i].travelRate.gauss.coeff = srcBeh.rate.gauss.coeff;
                speMdl.behavior[i].travelRate.gauss.mean = srcBeh.rate.gauss.mean;
                speMdl.behavior[i].travelRate.gauss.std = srcBeh.rate.gauss.std;
                speMdl.behavior[i].travelRate.rnd.coeff = srcBeh.rate.randm.coeff;
                speMdl.behavior[i].travelRate.rnd.max = srcBeh.rate.randm.max;
                speMdl.behavior[i].travelRate.rnd.min = srcBeh.rate.randm.min;
                speMdl.behavior[i].travelRate.vm.step = CUtil.CopyMatrix(srcBeh.rate.vectorMdl.step);
                speMdl.behavior[i].travelRate.vm.terminate = CUtil.CopyMatrix(srcBeh.rate.vectorMdl.termination);
                speMdl.behavior[i].travelRate.vm.vector = CUtil.CopyMatrix(srcBeh.rate.vectorMdl.vector);

                //-----------------------------------------//
                // Dive Ascent Rate
                // 10 parameters, including 3 vector models
                //-----------------------------------------//
                speMdl.behavior[i].dive.ascentRate.modelType = (mbsSTANDARD_MODEL_TYPE)srcBeh.ascent.modelType;
                speMdl.behavior[i].dive.ascentRate.gauss.coeff = srcBeh.ascent.gauss.coeff;
                speMdl.behavior[i].dive.ascentRate.gauss.mean = srcBeh.ascent.gauss.mean;
                speMdl.behavior[i].dive.ascentRate.gauss.std = srcBeh.ascent.gauss.std;
                speMdl.behavior[i].dive.ascentRate.rnd.coeff = srcBeh.ascent.randm.coeff;
                speMdl.behavior[i].dive.ascentRate.rnd.max = srcBeh.ascent.randm.max;
                speMdl.behavior[i].dive.ascentRate.rnd.min = srcBeh.ascent.randm.min;
                speMdl.behavior[i].dive.ascentRate.vm.step = CUtil.CopyMatrix(srcBeh.ascent.vectorMdl.step);
                speMdl.behavior[i].dive.ascentRate.vm.terminate = CUtil.CopyMatrix(srcBeh.ascent.vectorMdl.termination);
                speMdl.behavior[i].dive.ascentRate.vm.vector = CUtil.CopyMatrix(srcBeh.ascent.vectorMdl.vector);

                //-----------------------------------------//
                // Dive Descent Rate
                // 10 parameters, including 3 vector models
                //-----------------------------------------//
                speMdl.behavior[i].dive.descentRate.modelType = (mbsSTANDARD_MODEL_TYPE)srcBeh.descent.modelType;
                speMdl.behavior[i].dive.descentRate.gauss.coeff = srcBeh.descent.gauss.coeff;
                speMdl.behavior[i].dive.descentRate.gauss.mean = srcBeh.descent.gauss.mean;
                speMdl.behavior[i].dive.descentRate.gauss.std = srcBeh.descent.gauss.std;
                speMdl.behavior[i].dive.descentRate.rnd.coeff = srcBeh.descent.randm.coeff;
                speMdl.behavior[i].dive.descentRate.rnd.max = srcBeh.descent.randm.max;
                speMdl.behavior[i].dive.descentRate.rnd.min = srcBeh.descent.randm.min;
                speMdl.behavior[i].dive.descentRate.vm.step = CUtil.CopyMatrix(srcBeh.descent.vectorMdl.step);
                speMdl.behavior[i].dive.descentRate.vm.terminate = CUtil.CopyMatrix(srcBeh.descent.vectorMdl.termination);
                speMdl.behavior[i].dive.descentRate.vm.vector = CUtil.CopyMatrix(srcBeh.descent.vectorMdl.vector);

                //---------------------------//
                // Dive Bottom Following
                //---------------------------//
                //speMdl.behavior[i].dive.bottomFollows = CUtil.BooleanToInt(beh.flatBottomDivingEnabled);
                switch(srcBeh.flatBottomDive.modelType)
                {
                    case MODELTYPE.DISABLED:
                        speMdl.behavior[i].dive.bttmFollow.bttmFollowType = mbsBTTMFLLW_MDL_TYPE.mbsNO_BTTMFLLWNG;
                        break;
                    case MODELTYPE.EXTERNALLYMODELED:
                        speMdl.behavior[i].dive.bttmFollow.bttmFollowType = 
                        mbsBTTMFLLW_MDL_TYPE.mbsBOTTOMFOLLOWS_CURRENT_VELOCITY;
                        break;
                    case MODELTYPE.GAUSSIAN:
                        speMdl.behavior[i].dive.bttmFollow.bttmFollowType = 
                        mbsBTTMFLLW_MDL_TYPE.mbsBOTTOMFOLLOWS_GAUSSIAN_VELOCITY;
                        break;
                    case MODELTYPE.RANDOM:
                        speMdl.behavior[i].dive.bttmFollow.bttmFollowType = 
                        mbsBTTMFLLW_MDL_TYPE.mbsBOTTOMFOLLOWS_UNIFORM_VELOCITY;
                        break;
                    case MODELTYPE.MATRIX:
                        Debug.Assert(false); // coding error.
                        break;
                }

                speMdl.behavior[i].dive.bttmFollow.gauss.mean = srcBeh.flatBottomDive.gauss.mean;
                speMdl.behavior[i].dive.bttmFollow.gauss.std = srcBeh.flatBottomDive.gauss.std;
                speMdl.behavior[i].dive.bttmFollow.gauss.coeff = srcBeh.flatBottomDive.gauss.coeff;

                speMdl.behavior[i].dive.bttmFollow.rnd.max = srcBeh.flatBottomDive.randm.max;
                speMdl.behavior[i].dive.bttmFollow.rnd.min = srcBeh.flatBottomDive.randm.min;
                speMdl.behavior[i].dive.bttmFollow.rnd.coeff = srcBeh.flatBottomDive.randm.coeff;


                //-----------------------------------------//
                // Dive Depth
                // 9 parameters, including 2 vector models
                //-----------------------------------------//
                speMdl.behavior[i].dive.depth.modelType = (mbsSTANDARD_MODEL_TYPE)srcBeh.depth.type;
                speMdl.behavior[i].dive.depth.gauss.coeff = -1; // not used.
                speMdl.behavior[i].dive.depth.gauss.mean = srcBeh.depth.gauss.mean;
                speMdl.behavior[i].dive.depth.gauss.std = srcBeh.depth.gauss.std;
                speMdl.behavior[i].dive.depth.rnd.coeff = -1; // not used
                speMdl.behavior[i].dive.depth.rnd.max = srcBeh.depth.randm.max;
                speMdl.behavior[i].dive.depth.rnd.min = 0; // not used
                speMdl.behavior[i].dive.depth.vm.step = CUtil.CopyMatrix(srcBeh.depth.vectorMdl.step);
                speMdl.behavior[i].dive.depth.vm.vector = CUtil.CopyMatrix(srcBeh.depth.vectorMdl.vector);

                //-----------------------------------------//
                // Dive Reversals
                // 23 parameters, including 4 vector models
                //-----------------------------------------//
                speMdl.behavior[i].dive.reversal.modelType = (mbsSTANDARD_MODEL_TYPE)srcBeh.reversal.type;
                speMdl.behavior[i].dive.reversal.reverses = CUtil.BooleanToInt(srcBeh.reversal.enabled);
                speMdl.behavior[i].dive.reversal.gauss.count.coeff = -1; // not used.
                speMdl.behavior[i].dive.reversal.gauss.count.mean = srcBeh.reversal.gauss.meanCnt;
                speMdl.behavior[i].dive.reversal.gauss.count.std = srcBeh.reversal.gauss.stdCnt;
                speMdl.behavior[i].dive.reversal.gauss.probOfReversal = srcBeh.reversal.gauss.prob;
                speMdl.behavior[i].dive.reversal.gauss.time.coeff = -1; // not used.
                speMdl.behavior[i].dive.reversal.gauss.time.mean = srcBeh.reversal.gauss.meanTime;
                speMdl.behavior[i].dive.reversal.gauss.time.std = srcBeh.reversal.gauss.stdTime;
                speMdl.behavior[i].dive.reversal.rnd.count.max = srcBeh.reversal.randm.maxCnt;
                speMdl.behavior[i].dive.reversal.rnd.count.min = srcBeh.reversal.randm.minCnt;
                speMdl.behavior[i].dive.reversal.rnd.probOfReversal = srcBeh.reversal.randm.prob;
                speMdl.behavior[i].dive.reversal.rnd.time.coeff = -1; // not used.
                speMdl.behavior[i].dive.reversal.rnd.time.mean = srcBeh.reversal.randm.meanTime;
                speMdl.behavior[i].dive.reversal.rnd.time.std = srcBeh.reversal.randm.stdTime;
                //speMdl.behavior[i].dive.reversal.hasaIndependentDiveRate = CUtil.BooleanToInt(beh.reversal.diveRateEnabled);
                speMdl.behavior[i].dive.reversal.diveRateType = (mbsREVERSAL_DIVE_RATE_TYPE)srcBeh.reversal.reversalDiveRateType;
                speMdl.behavior[i].dive.reversal.diveRate.coeff = srcBeh.reversal.diveRate.coeff;
                speMdl.behavior[i].dive.reversal.diveRate.mean = srcBeh.reversal.diveRate.mean;
                speMdl.behavior[i].dive.reversal.diveRate.std = srcBeh.reversal.diveRate.std;

                speMdl.behavior[i].dive.reversal.ascentRate.coeff = srcBeh.reversal.ascentRate.coeff;
                speMdl.behavior[i].dive.reversal.ascentRate.mean = srcBeh.reversal.ascentRate.mean;
                speMdl.behavior[i].dive.reversal.ascentRate.std = srcBeh.reversal.ascentRate.std;

                speMdl.behavior[i].dive.reversal.vm.count = CUtil.CopyMatrix(srcBeh.reversal.vector.countVector);
                speMdl.behavior[i].dive.reversal.vm.probOfReversal = CUtil.CopyMatrix(srcBeh.reversal.vector.probabilityElement);
                speMdl.behavior[i].dive.reversal.vm.time = CUtil.CopyMatrix(srcBeh.reversal.vector.durationVector);
                speMdl.behavior[i].dive.reversal.vm.timeStep = CUtil.CopyMatrix(srcBeh.reversal.vector.durationStepElement);

                //-----------------------------------------//
                // Dive Surface interval
                // 6 parameters, including 4 vector models
                //-----------------------------------------//
                speMdl.behavior[i].dive.srfInv.gauss.coeff = -1; // not used.
                speMdl.behavior[i].dive.srfInv.gauss.mean = srcBeh.surfaceInterval.gauss.mean;
                speMdl.behavior[i].dive.srfInv.gauss.std = srcBeh.surfaceInterval.gauss.std;
                speMdl.behavior[i].dive.srfInv.modelType = (mbsSTANDARD_MODEL_TYPE)srcBeh.surfaceInterval.type;
                speMdl.behavior[i].dive.srfInv.vm.step = CUtil.CopyMatrix(srcBeh.surfaceInterval.vectorMdl.step);
                speMdl.behavior[i].dive.srfInv.vm.vector = CUtil.CopyMatrix(srcBeh.surfaceInterval.vectorMdl.vector);

                //-----------------------------------------//
                // Behavior Transition
                // 2 parameters, including 2 vector models
                //-----------------------------------------//
                speMdl.behavior[i].nrmlBehTransCnt = srcBeh.SpanManager.SpanCount;
                speMdl.behavior[i].nrmlBehTrans = new mbsBEHTRAN[speMdl.behavior[i].nrmlBehTransCnt];

                switch(srcBeh.BehaviorTerminationModel)
                {
                    case BEHTRANS_TERM_MODEL.T50_K_TERM:
                        speMdl.behavior[i].behTransTermFormula = mbsBehTermFormula.T50_K;
                        break;
                    case BEHTRANS_TERM_MODEL.GAUSSIAN_TERM:
                        speMdl.behavior[i].behTransTermFormula = mbsBehTermFormula.GAUSSIAN;
                        break;
                }
                //srcBeh.BehaviorTerminationModel;
                //speMdl.behavior[i].
                for(j=0; j<speMdl.behavior[i].nrmlBehTransCnt; j++)
                {
                    behTransRef = srcBeh.SpanManager.GetSpan(j);
                    speMdl.behavior[i].nrmlBehTrans[j].depthSpan.shallow = behTransRef.shallow;
                    speMdl.behavior[i].nrmlBehTrans[j].depthSpan.deep = behTransRef.deep;
                    speMdl.behavior[i].nrmlBehTrans[j].m = CUtil.CopyMatrix(behTransRef.behTrans.matrix);
                }
            }

            ///////////////////////////////////////////////////////////////
            if(TextFileInstead == true)
                m_wrapper.ModelToTextFile(FileName, speMdl);
            else
                m_wrapper.SaveToBinFile(FileName, speMdl);

            // Update fields for year, month, day, hour, min, sec, and semiunique ID resulting from the save.
            m_mbsLibSavedSuperVer = speMdl.mbsLibVerSuper;
            m_mbsLibSavedSubVer = speMdl.mbsLibVerSub;
            m_speciesMdlSavedSuperVer = speMdl.speVerSuper;
            m_speciesMdlSavedSubVer = speMdl.speVerSub;

            m_year = speMdl.year;
            m_month = speMdl.month;
            m_day = speMdl.day;
            m_hour = speMdl.hour;
            m_min = speMdl.min;
            m_sec = speMdl.sec;
            m_id = speMdl.id;
        }
        //--------------------------//
        // File IO Member Functions
        //--------------------------//
        public mbsRESULT LoadFromBinFile(string FileName)
        {
            int i;
            int depthRange;
            mbsRESULT res = mbsRESULT.OK;
            CBehavior beh;
            mbsSPECIESMODEL speMdl = new mbsSPECIESMODEL(); // from the wrapper class project
            CSpan depthRangeMdl;

            if(mbsRESULT.OK != (res = m_wrapper.LoadFromBinFile(FileName, speMdl)))
                return res;

            m_needSave = false;


            ///////////////////////////////////////////////////////////////
            //----------------------//
            // Acoustic Aversion
            // 39 parameters
            //----------------------//
            m_acAvrsn.ascentEnabled = CUtil.IntToBoolean(speMdl.acousticAversion.ascentRateAffected);
            m_acAvrsn.ascent.coeff = speMdl.acousticAversion.ascentRate.coeff;
            m_acAvrsn.ascent.mean = speMdl.acousticAversion.ascentRate.mean;
            m_acAvrsn.ascent.std = speMdl.acousticAversion.ascentRate.std;
            m_acAvrsn.descentEnabled = CUtil.IntToBoolean(speMdl.acousticAversion.descentRateAffected);
            m_acAvrsn.descent.coeff = speMdl.acousticAversion.descentRate.coeff;
            m_acAvrsn.descent.mean = speMdl.acousticAversion.descentRate.mean;
            m_acAvrsn.descent.std = speMdl.acousticAversion.descentRate.std;
            m_acAvrsn.beachingEnabled = CUtil.IntToBoolean(speMdl.acousticAversion.beaches);
            m_beachingDepth = speMdl.acousticAversion.beachingDepth;
            //              = speMdl.acousticAversion.depth.coeff; // Not used by depth model.
            m_acAvrsn.depth.mean = speMdl.acousticAversion.depth.mean;
            m_acAvrsn.depth.std = speMdl.acousticAversion.depth.std;
            m_acAvrsn.depthEnabled = CUtil.IntToBoolean(speMdl.acousticAversion.depthAffected);
            m_acAvrsn.flatBottomDivingEnabled = CUtil.IntToBoolean(speMdl.acousticAversion.flatBottomDiveAffected);
            m_acAvrsn.flatBottomDives = CUtil.IntToBoolean(speMdl.acousticAversion.flatBottomDives);
            m_aePodBreaksApart = CUtil.IntToBoolean(speMdl.acousticAversion.podBreaksUp);
            //              = speMdl.acousticAversion.reversal.count.coeff;;// Not used by depth model.
            m_acAvrsn.reversal.meanCnt = speMdl.acousticAversion.reversal.count.mean;
            m_acAvrsn.reversal.stdCnt = speMdl.acousticAversion.reversal.count.std;
            m_acAvrsn.reversal.prob = speMdl.acousticAversion.reversal.probOfReversal;
            //              = speMdl.acousticAversion.reversal.time.coeff;-1;// Not used by depth model
            m_acAvrsn.reversal.meanTime = speMdl.acousticAversion.reversal.time.mean;
            m_acAvrsn.reversal.stdTime = speMdl.acousticAversion.reversal.time.std;
            m_acAvrsn.reverseEnabled = CUtil.IntToBoolean(speMdl.acousticAversion.reversalAffected);
            //              = speMdl.acousticAversion.surfaceInterval.coeff;-1;// Not used by depth model
            m_acAvrsn.surfaceInterval.mean = speMdl.acousticAversion.surfaceInterval.mean;
            m_acAvrsn.surfaceInterval.std = speMdl.acousticAversion.surfaceInterval.std;
            m_acAvrsn.srfIntvlEnabled = CUtil.IntToBoolean(speMdl.acousticAversion.surfaceIntervalAffected);
            m_acAvrsn.direction.arcStep = speMdl.acousticAversion.travel.arcStep;
            m_acAvrsn.direction.bias = speMdl.acousticAversion.travel.bias;
            m_acAvrsn.direction.biasDir = speMdl.acousticAversion.travel.directionOfBias;
            m_acAvrsn.direction.pert = speMdl.acousticAversion.travel.perturbation;
            m_acAvrsn.direction.coeff = speMdl.acousticAversion.travel.termCoeff;
            m_acAvrsn.directnEnabled = CUtil.IntToBoolean(speMdl.acousticAversion.travelDirectionAffected);
            m_acAvrsn.rate.coeff = speMdl.acousticAversion.travelRate.coeff;
            m_acAvrsn.rate.mean = speMdl.acousticAversion.travelRate.mean;
            m_acAvrsn.rate.std = speMdl.acousticAversion.travelRate.std;
            m_acAvrsn.rateEnabled = CUtil.IntToBoolean(speMdl.acousticAversion.travelRateAffected);


            //----------------------------------------------------------------------------------//
            // Species Description
            // 7 parameters: 3mbs lib version, species version, species group, short description,
            //				 long comment, shore following depth, and number of behaviors
            //----------------------------------------------------------------------------------//
            m_mbsLibSavedSuperVer = speMdl.mbsLibVerSuper;
            m_mbsLibSavedSubVer = speMdl.mbsLibVerSub;
            m_speciesMdlSavedSuperVer = speMdl.speVerSuper;
            m_speciesMdlSavedSubVer = speMdl.speVerSub;
            //m_mbsLibVersion = speMdl.mbsLibVer;
            //m_speciesMdlVersion = speMdl.speVer;
            m_groupIndex = speMdl.speciesGroup;
            m_shortDescription = speMdl.szSpeciesShrtDscrptn;
            m_longComment = speMdl.szSpeciesLongComment;
            m_shoreFollow = speMdl.shoreFollowDepth;
            m_seedMinDepth = speMdl.minSeedDepth;
            m_seedingDepthLimit = speMdl.deepWaterSeedingDepth;

            if(speMdl.deepWaterSeedingDepthEnabled == 0)
                m_seedingDepthLimitEnabled = false;
            else
                m_seedingDepthLimitEnabled = true;

            // Behavior count not maintained because the array stores it's own length.

            m_speciesIndex = speMdl.speciesName;

            m_year = speMdl.year;
            m_month = speMdl.month;
            m_day = speMdl.day;
            m_hour = speMdl.hour;
            m_min = speMdl.min;
            m_sec = speMdl.sec;
            m_id = speMdl.id;


            //---------------------//
            // Initial Behavior
            //---------------------//
            //m_initialBehavior = CUtil.CopyMatrix(speMdl.initialBehavior);
            m_initBehSpanMgr.DeleteAllSpans();
            Debug.Assert(m_initBehSpanMgr.SpanCount == 0);
            for(depthRange=0; depthRange<speMdl.initBehSpanCnt; depthRange++)
            {
                depthRangeMdl = m_initBehSpanMgr.AddSpan();
                depthRangeMdl.shallow = speMdl.initialBehavior[depthRange].depthSpan.shallow;
                depthRangeMdl.deep = speMdl.initialBehavior[depthRange].depthSpan.deep;
                depthRangeMdl.behTrans.matrix = CUtil.CopyMatrix(speMdl.initialBehavior[depthRange].m);
            }
            //m_ib = new mbsBEHTRAN[speMdl.initBehSpanCnt];
            
            
            
            //------------------------//
            // Behavior Allocation
            //------------------------//
            m_behMgr = new CBehaviorListMgr();

            for(i=0; i<speMdl.behaviorCount; i++)
            {
                // Add a behavior.  Set the UpdateModel param to false in order to
                // initialize the behavior and rest of model based upon loaded params.
                beh = m_behMgr.AddBehavior(false);

                //------------------//
                // Behavior Name
                //------------------//
                beh.name = speMdl.behavior[i].szName;

                //-------------------------------------//
                // Environmental Attractor Priority
                //-------------------------------------//
                if(speMdl.behavior[i].depthHasPriorityOverTemp == 1)
                    beh.envInfPriority = ENVATTRACTORPRIORITY.DIVE;
                else
                    beh.envInfPriority = ENVATTRACTORPRIORITY.TEMPERATURE;

                //----------------------------------------//
                // Depth environmental attractor
                // 8 parameters, including 2 vector models
                //----------------------------------------//
                beh.envAttrDepth.shelfEnabled = CUtil.IntToBoolean(speMdl.behavior[i].depthEnvAtt.shelfIsEnabled);
                beh.envAttrDepth.shelfDepth = speMdl.behavior[i].depthEnvAtt.shelfDepth;
                beh.envAttrDepth.shelfSlope = speMdl.behavior[i].depthEnvAtt.shelfSlope;

                beh.envAttrDepth.basinEnabled = CUtil.IntToBoolean(speMdl.behavior[i].depthEnvAtt.basinIsEnabled);
                beh.envAttrDepth.basinDepth = speMdl.behavior[i].depthEnvAtt.basinDepth;
                beh.envAttrDepth.basinSlope = speMdl.behavior[i].depthEnvAtt.basinSlope;

                beh.envAttrDepth.slopeEnabled = CUtil.IntToBoolean(speMdl.behavior[i].depthEnvAtt.slopeIsEnabled);
                beh.envAttrDepth.slopeDepth = speMdl.behavior[i].depthEnvAtt.slopeDepth;
                beh.envAttrDepth.slopeSlope = speMdl.behavior[i].depthEnvAtt.slopeSlope;
                
                beh.depthBehTrans.vector = CUtil.CopyMatrix(speMdl.behavior[i].depthEnvAttBehTrans.behavior);
                beh.depthBehTrans.element = CUtil.CopyMatrix(speMdl.behavior[i].depthEnvAttBehTrans.terminate);
                beh.depthBehTrans.meanTimeInBehMinuites = speMdl.behavior[i].depthEnvAttBehTrans.meanTimeInBeh;
                beh.depthBehTrans.slopeCoeff_goesAway = speMdl.behavior[i].depthEnvAttBehTrans.slopeCoefficient;

                //-----------------------------------------//
                // Temperature Environmental Attractor
                // 8 parameters, including 2 vector models
                //-----------------------------------------//
                beh.envAttrTemp.front = speMdl.behavior[i].tempEnvAtt.delta;
                beh.envAttrTemp.frontEnabled = CUtil.IntToBoolean(speMdl.behavior[i].tempEnvAtt.deltaIsEnabled);
                beh.envAttrTemp.warm = speMdl.behavior[i].tempEnvAtt.max;
                beh.envAttrTemp.coldEnabled = CUtil.IntToBoolean(speMdl.behavior[i].tempEnvAtt.maxIsEnabled);
                beh.envAttrTemp.cold = speMdl.behavior[i].tempEnvAtt.min;
                beh.envAttrTemp.warmEnabled = CUtil.IntToBoolean(speMdl.behavior[i].tempEnvAtt.minIsEnabled);
                beh.temperatureBehTrans.vector = CUtil.CopyMatrix(speMdl.behavior[i].tempEnvAttBehTrans.behavior);
                beh.temperatureBehTrans.element = CUtil.CopyMatrix(speMdl.behavior[i].tempEnvAttBehTrans.terminate);
                beh.temperatureBehTrans.meanTimeInBehMinuites = speMdl.behavior[i].tempEnvAttBehTrans.meanTimeInBeh;
                beh.temperatureBehTrans.slopeCoeff_goesAway = speMdl.behavior[i].tempEnvAttBehTrans.slopeCoefficient;


                //-----------------------------------------//
                // Travel Direction
                // 12 parameters, including 3 vector models
                //-----------------------------------------//
                beh.direction.type = (DIRECTIONMODELTYPE)speMdl.behavior[i].travelDirection.modelType;
                beh.direction.correlatedRndmWalk.pert = speMdl.behavior[i].travelDirection.crRndWalk.perturbation;
                beh.direction.correlatedRndmWalk.coeff = speMdl.behavior[i].travelDirection.crRndWalk.termCoeff;
                beh.direction.correlatedRndmWalkDirBias.arcStep = speMdl.behavior[i].travelDirection.crRndWalkDb.arcStep;
                beh.direction.correlatedRndmWalkDirBias.bias = speMdl.behavior[i].travelDirection.crRndWalkDb.bias;
                beh.direction.correlatedRndmWalkDirBias.biasDir = speMdl.behavior[i].travelDirection.crRndWalkDb.directionOfBias;
                beh.direction.correlatedRndmWalkDirBias.pert = speMdl.behavior[i].travelDirection.crRndWalkDb.perturbation;
                beh.direction.correlatedRndmWalkDirBias.coeff = speMdl.behavior[i].travelDirection.crRndWalkDb.termCoeff;
                beh.direction.rndmWalk.coeff = speMdl.behavior[i].travelDirection.rndWalk.termCoeff;
                beh.direction.matrix.directionVector = CUtil.CopyMatrix(speMdl.behavior[i].travelDirection.vm.direction);
                beh.direction.matrix.directionBiasMatrix = CUtil.CopyMatrix(speMdl.behavior[i].travelDirection.vm.directionalBias);
                beh.direction.matrix.term = CUtil.CopyMatrix(speMdl.behavior[i].travelDirection.vm.terminate);

                //-----------------------------------------//
                // Travel Rate
                // 10 parameters, including 3 vector models
                //-----------------------------------------//
                beh.rate.modelType = (MODELTYPE)speMdl.behavior[i].travelRate.modelType;
                beh.rate.gauss.coeff = speMdl.behavior[i].travelRate.gauss.coeff;
                beh.rate.gauss.mean = speMdl.behavior[i].travelRate.gauss.mean;
                beh.rate.gauss.std = speMdl.behavior[i].travelRate.gauss.std;
                beh.rate.randm.coeff = speMdl.behavior[i].travelRate.rnd.coeff;
                beh.rate.randm.max = speMdl.behavior[i].travelRate.rnd.max;
                beh.rate.randm.min = speMdl.behavior[i].travelRate.rnd.min;
                beh.rate.vectorMdl.step = CUtil.CopyMatrix(speMdl.behavior[i].travelRate.vm.step);
                beh.rate.vectorMdl.termination = CUtil.CopyMatrix(speMdl.behavior[i].travelRate.vm.terminate);
                beh.rate.vectorMdl.vector = CUtil.CopyMatrix(speMdl.behavior[i].travelRate.vm.vector);

                //-----------------------------------------//
                // Dive Ascent Rate
                // 10 parameters, including 3 vector models
                //-----------------------------------------//
                beh.ascent.modelType = (MODELTYPE)speMdl.behavior[i].dive.ascentRate.modelType;
                beh.ascent.gauss.coeff = speMdl.behavior[i].dive.ascentRate.gauss.coeff;
                beh.ascent.gauss.mean = speMdl.behavior[i].dive.ascentRate.gauss.mean;
                beh.ascent.gauss.std = speMdl.behavior[i].dive.ascentRate.gauss.std;
                beh.ascent.randm.coeff = speMdl.behavior[i].dive.ascentRate.rnd.coeff;
                beh.ascent.randm.max = speMdl.behavior[i].dive.ascentRate.rnd.max;
                beh.ascent.randm.min = speMdl.behavior[i].dive.ascentRate.rnd.min;
                beh.ascent.vectorMdl.step = CUtil.CopyMatrix(speMdl.behavior[i].dive.ascentRate.vm.step);
                beh.ascent.vectorMdl.termination = CUtil.CopyMatrix(speMdl.behavior[i].dive.ascentRate.vm.terminate);
                beh.ascent.vectorMdl.vector = CUtil.CopyMatrix(speMdl.behavior[i].dive.ascentRate.vm.vector);

                //-----------------------------------------//
                // Dive Descent Rate
                // 10 parameters, including 3 vector models
                //-----------------------------------------//
                beh.descent.modelType = (MODELTYPE)speMdl.behavior[i].dive.descentRate.modelType;
                beh.descent.gauss.coeff = speMdl.behavior[i].dive.descentRate.gauss.coeff;
                beh.descent.gauss.mean = speMdl.behavior[i].dive.descentRate.gauss.mean;
                beh.descent.gauss.std = speMdl.behavior[i].dive.descentRate.gauss.std;
                beh.descent.randm.coeff = speMdl.behavior[i].dive.descentRate.rnd.coeff;
                beh.descent.randm.max = speMdl.behavior[i].dive.descentRate.rnd.max;
                beh.descent.randm.min = speMdl.behavior[i].dive.descentRate.rnd.min;
                beh.descent.vectorMdl.step = CUtil.CopyMatrix(speMdl.behavior[i].dive.descentRate.vm.step);
                beh.descent.vectorMdl.termination = CUtil.CopyMatrix(speMdl.behavior[i].dive.descentRate.vm.terminate);
                beh.descent.vectorMdl.vector = CUtil.CopyMatrix(speMdl.behavior[i].dive.descentRate.vm.vector);

                //---------------------------//
                // Dive Bottom Following
                //---------------------------//
                //beh.flatBottomDivingEnabled = CUtil.IntToBoolean(speMdl.behavior[i].dive.bottomFollows);
                switch(speMdl.behavior[i].dive.bttmFollow.bttmFollowType)
                {
                    case mbsBTTMFLLW_MDL_TYPE.mbsNO_BTTMFLLWNG:
                        beh.flatBottomDive.modelType = MODELTYPE.DISABLED;
                        break;
                    case mbsBTTMFLLW_MDL_TYPE.mbsBOTTOMFOLLOWS_CURRENT_VELOCITY:
                        beh.flatBottomDive.modelType = MODELTYPE.EXTERNALLYMODELED;
                        break;
                    case mbsBTTMFLLW_MDL_TYPE.mbsBOTTOMFOLLOWS_GAUSSIAN_VELOCITY:
                        beh.flatBottomDive.modelType = MODELTYPE.GAUSSIAN;
                        break;
                    case mbsBTTMFLLW_MDL_TYPE.mbsBOTTOMFOLLOWS_UNIFORM_VELOCITY:
                        beh.flatBottomDive.modelType = MODELTYPE.RANDOM;
                        break;
                }

                beh.flatBottomDive.gauss.mean = speMdl.behavior[i].dive.bttmFollow.gauss.mean;
                beh.flatBottomDive.gauss.std = speMdl.behavior[i].dive.bttmFollow.gauss.std;
                beh.flatBottomDive.gauss.coeff = speMdl.behavior[i].dive.bttmFollow.gauss.coeff;

                beh.flatBottomDive.randm.max = speMdl.behavior[i].dive.bttmFollow.rnd.max;
                beh.flatBottomDive.randm.min = speMdl.behavior[i].dive.bttmFollow.rnd.min;
                beh.flatBottomDive.randm.coeff = speMdl.behavior[i].dive.bttmFollow.rnd.coeff;

                beh.flatBottomDive.vectorMdl.vector.a = null;
                beh.flatBottomDive.vectorMdl.step.a = 0;
                beh.flatBottomDive.vectorMdl.termination.a = 0;

                //-----------------------------------------//
                // Dive Depth
                // 9 parameters, including 2 vector models
                //-----------------------------------------//
                beh.depth.type = (MODELTYPE)speMdl.behavior[i].dive.depth.modelType;
                //      = speMdl.behavior[i].dive.depth.gauss.coeff; // not used.
                beh.depth.gauss.mean = speMdl.behavior[i].dive.depth.gauss.mean;
                beh.depth.gauss.std = speMdl.behavior[i].dive.depth.gauss.std;
                //      = speMdl.behavior[i].dive.depth.rnd.coeff; // not used
                beh.depth.randm.max = speMdl.behavior[i].dive.depth.rnd.max;
                //      = speMdl.behavior[i].dive.depth.rnd.min; // not used
                beh.depth.vectorMdl.step = CUtil.CopyMatrix(speMdl.behavior[i].dive.depth.vm.step);
                beh.depth.vectorMdl.vector = CUtil.CopyMatrix(speMdl.behavior[i].dive.depth.vm.vector);

                //-----------------------------------------//
                // Dive Reversals
                // 23 parameters, including 4 vector models
                //-----------------------------------------//
                beh.reversal.type = (MODELTYPE)speMdl.behavior[i].dive.reversal.modelType;
                beh.reversal.enabled = CUtil.IntToBoolean(speMdl.behavior[i].dive.reversal.reverses);
                //-1 = speMdl.behavior[i].dive.reversal.gauss.count.coeff; // not used.
                beh.reversal.gauss.meanCnt = speMdl.behavior[i].dive.reversal.gauss.count.mean;
                beh.reversal.gauss.stdCnt = speMdl.behavior[i].dive.reversal.gauss.count.std;
                beh.reversal.gauss.prob = speMdl.behavior[i].dive.reversal.gauss.probOfReversal;
                //-1 = speMdl.behavior[i].dive.reversal.gauss.time.coeff; // not used.
                beh.reversal.gauss.meanTime = speMdl.behavior[i].dive.reversal.gauss.time.mean;
                beh.reversal.gauss.stdTime = speMdl.behavior[i].dive.reversal.gauss.time.std;
                beh.reversal.randm.maxCnt = speMdl.behavior[i].dive.reversal.rnd.count.max;
                beh.reversal.randm.minCnt = speMdl.behavior[i].dive.reversal.rnd.count.min;
                beh.reversal.randm.prob = speMdl.behavior[i].dive.reversal.rnd.probOfReversal;
                //-1 = speMdl.behavior[i].dive.reversal.rnd.time.coeff; // not used.
                beh.reversal.randm.meanTime = speMdl.behavior[i].dive.reversal.rnd.time.mean;
                beh.reversal.randm.stdTime = speMdl.behavior[i].dive.reversal.rnd.time.std;
                beh.reversal.reversalDiveRateType = (REVERSAL_DIVE_RATE_TYPE)(speMdl.behavior[i].dive.reversal.diveRateType);
                //beh.reversal.diveRateEnabled = CUtil.IntToBoolean(speMdl.behavior[i].dive.reversal.hasaIndependentDiveRate);

                beh.reversal.diveRate.coeff = speMdl.behavior[i].dive.reversal.diveRate.coeff;
                beh.reversal.diveRate.mean = speMdl.behavior[i].dive.reversal.diveRate.mean;
                beh.reversal.diveRate.std = speMdl.behavior[i].dive.reversal.diveRate.std;

                beh.reversal.ascentRate.coeff = speMdl.behavior[i].dive.reversal.ascentRate.coeff;
                beh.reversal.ascentRate.mean = speMdl.behavior[i].dive.reversal.ascentRate.mean;
                beh.reversal.ascentRate.std = speMdl.behavior[i].dive.reversal.ascentRate.std;


                beh.reversal.vector.countVector = CUtil.CopyMatrix(speMdl.behavior[i].dive.reversal.vm.count);
                beh.reversal.vector.probabilityElement = CUtil.CopyMatrix(speMdl.behavior[i].dive.reversal.vm.probOfReversal);
                beh.reversal.vector.durationVector = CUtil.CopyMatrix(speMdl.behavior[i].dive.reversal.vm.time);
                beh.reversal.vector.durationStepElement =  CUtil.CopyMatrix(speMdl.behavior[i].dive.reversal.vm.timeStep);

                //-----------------------------------------//
                // Dive Surface interval
                // 6 parameters, including 4 vector models
                //-----------------------------------------//
                //-1 = speMdl.behavior[i].dive.srfInv.gauss.coeff; // not used.
                beh.surfaceInterval.gauss.mean = speMdl.behavior[i].dive.srfInv.gauss.mean;
                beh.surfaceInterval.gauss.std = speMdl.behavior[i].dive.srfInv.gauss.std;
                beh.surfaceInterval.type = (SRFINVMODELTYPE)speMdl.behavior[i].dive.srfInv.modelType;
                beh.surfaceInterval.vectorMdl.step = CUtil.CopyMatrix(speMdl.behavior[i].dive.srfInv.vm.step);
                beh.surfaceInterval.vectorMdl.vector = CUtil.CopyMatrix(speMdl.behavior[i].dive.srfInv.vm.vector);

                //-----------------------------------------//
                // Behavior Transition
                // 2 parameters, including 2 vector models
                //-----------------------------------------//
                switch(speMdl.behavior[i].behTransTermFormula)
                {
                    case mbsBehTermFormula.T50_K:
                        beh.BehaviorTerminationModel = BEHTRANS_TERM_MODEL.T50_K_TERM;
                        break;
                    case mbsBehTermFormula.GAUSSIAN:
                        beh.BehaviorTerminationModel = BEHTRANS_TERM_MODEL.GAUSSIAN_TERM;
                        break;
                }
                //nrmlTrans
                beh.SpanManager.DeleteAllSpans();
                Debug.Assert(beh.SpanManager.SpanCount == 0);
                for(depthRange=0; depthRange<speMdl.behavior[i].nrmlBehTransCnt; depthRange++)
                {
                    depthRangeMdl = beh.SpanManager.AddSpan(/*m_behMgr.Count*/);
                    depthRangeMdl.shallow = speMdl.behavior[i].nrmlBehTrans[depthRange].depthSpan.shallow;
                    depthRangeMdl.deep = speMdl.behavior[i].nrmlBehTrans[depthRange].depthSpan.deep;
                    depthRangeMdl.behTrans.matrix = CUtil.CopyMatrix(speMdl.behavior[i].nrmlBehTrans[depthRange].m);
                }

            }
            ///////////////////////////////////////////////////////////////
            return mbsRESULT.OK;
        }