UNIVERS  15.3
UNIVERS base processing software API
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros
p_straight_model.H
1 /* p_straight_model.H */
2 /* $Id: p_straight_model.H,v 1.8 2005/07/18 07:16:08 nikita Exp $ */
3 #ifndef __p_straight_model_H
4 #define __p_straight_model_H
5 
6 
7 #include <mod3d/p_raytr_elements.H>
8 #include <mod3d/p_raytr_model.H>
9 
10 #include "p_straight_elements.H"
11 #include "rays_straight.H"
12 
13 #define PM_OUT_OF_DATE -6
15 protected:
16 
17  // Информация для более быстрого получения первых приближений при настреле // Общая int iBFBLast; // Номер тела, в котором в последний раз попали в приемник // Для падающей волны... rays raStraightLast; crossings_ptrs caCrossingsStraight; // Для отраженки... IntAr iaReflBordersLast; rays raReflsLast; crossings_ptrs caCrossingsRefl; // Флаги начальной настрелянности [8()] int iDWShotFlag; // Если положительный - настреляны, если нет, то нет // Ноль - все настреляны, число - одна граница, отр. - ни фига не настреляно int iUWShotFlag; pl_straight_bodies abNewBodies; pl_straight_bodies abNewStraightBodies; // Список новых тел на обработку // Получить однажды отраженный луч источник-приемник с отражением int get_reflected_ray(int,int,ray_parameters,double dAcc); void cover_possible_borders (int iReceiver,rays&, IntAr&,double dAcc) const; void cover_one_border(int iReceiver,int iBR,ray*&rRes,double dAcc)const; // Создание трассы по номеру источника и параметрам сейсмограммы StorageID create_trace (int iReceiver, int iSize,double dDt,double *dComp[3], double* daSignal,int iSigSize,double dAcc, int iWFlags); // Создает различные модельные сейсмограммы в источнике, // возвращает код ошибки StorageID create_iis(int iReciever, meta_iis & miRes,double dAcc,int iWFlags); // Создание трассы по посчитанной мета иис и параметрам сейсмограммы int form_trace (int iSize,double dDt,const meta_iis & miRes, double *dComp[3],double *daSignal,int iSigSize); // Вычисляет время первого вступления в яснокаком приемнике void calculate_first_break (int iN1,int iN2,const point& pReceiver, double& dTime,double dAcc); // Для использования в конструкторе по базе данных virtual p_pl_intern_border new_border(p_pl_intern_spline,border_flag); virtual p_pl_intern_body new_body(geophys_params&); void reflect_ray_from_border_to_border (ray*,int J,int K); void prepare_reflected_rays (); void push_body (int ib); int GetNumHitBorder(int j, const IntAr& iaBordersToExec, const rays& arRaysToExec, const IntAr& iaCrossingsToExec); // fern int GetNumClosestRay(const rays& arRaysToExec,const IntAr& iaCrossingsToExec, int iNewBorder); // fern Logic extend_parallel (point pOnBorder, border_hit_info* pbhi); void extend_ray_to_border (ray* prToPass, int iNewBorder, int iBodyN, crossing*cStart, border_hit_info* pbhi=NULL); void pass_body (p_pl_straight_body pBCurrent); void init_shot_point (const point& pShotPoint,int ik); void init_straight_tracing_process (const point &pShotPoint,int ik); void init_reflected_tracing_process (int ik); rays* get_straight_rays(int iReceiver,double dAcc); void try_to_pass_big_angle(); public: pl_straight_model (const dbItem &dbiWhere); pl_straight_model (pl_model& am); pl_straight_model (); ~pl_straight_model (); // Вообче то это для внутреннего употребления... Logic store_ray_and_node (int iBodN,ray* pr, int iNodeN); // Создание трассы по военным номерам источника и параметрам сейсмограммы StorageID create_trace (int N1,int N2, int iSize,double dDt,double *dComp[3], double* daSignal,int iSigSize,double dAcc, int iWFlags); // Моделирование без создания сейсмической трассы StorageID straight_modeling (int N1,int N2,double dAcc); // Определение первого вступления с разными приемниками void first_break_time (int iN1,int iN2,const point& pReceiver, double& dTime,double dAcc); void first_break_time(int iN1,int iN2,double& dTime); void uw_break_time(int iN1,int iN2,point&pR,int iB,double& dTime,double dA); void trace_reflected(int iUWKind=PM_P); void trace_reflected(int iBorder, int iUWKind); void trace_straight(const point &pShotPoint,int iDWKind); Logic register_receiver(int N1,int N2,point pRP); Logic straight_rays_shot()const; Logic reflected_rays_shot(int iBorder=0)const; virtual const char* class_id(){return "pl_straight_model";}; virtual Logic isDerivedFrom(const char* class_name); }; #endif /* p_straight_model.H */ /* Melnikov George Yu. 31-Jan-2000 */
18  // Общая
19  int iBFBLast; // Номер тела, в котором в последний раз попали в приемник
20 
21  // Для падающей волны...
22  rays raStraightLast;
23  crossings_ptrs caCrossingsStraight;
24 
25  // Для отраженки...
26  IntAr iaReflBordersLast;
27  rays raReflsLast;
28  crossings_ptrs caCrossingsRefl;
29 
30  // Флаги начальной настрелянности [8()]
31  int iDWShotFlag; // Если положительный - настреляны, если нет, то нет // Ноль - все настреляны, число - одна граница, отр. - ни фига не настреляно int iUWShotFlag; pl_straight_bodies abNewBodies; pl_straight_bodies abNewStraightBodies; // Список новых тел на обработку // Получить однажды отраженный луч источник-приемник с отражением int get_reflected_ray(int,int,ray_parameters,double dAcc); void cover_possible_borders (int iReceiver,rays&, IntAr&,double dAcc) const; void cover_one_border(int iReceiver,int iBR,ray*&rRes,double dAcc)const; // Создание трассы по номеру источника и параметрам сейсмограммы StorageID create_trace (int iReceiver, int iSize,double dDt,double *dComp[3], double* daSignal,int iSigSize,double dAcc, int iWFlags); // Создает различные модельные сейсмограммы в источнике, // возвращает код ошибки StorageID create_iis(int iReciever, meta_iis & miRes,double dAcc,int iWFlags); // Создание трассы по посчитанной мета иис и параметрам сейсмограммы int form_trace (int iSize,double dDt,const meta_iis & miRes, double *dComp[3],double *daSignal,int iSigSize); // Вычисляет время первого вступления в яснокаком приемнике void calculate_first_break (int iN1,int iN2,const point& pReceiver, double& dTime,double dAcc); // Для использования в конструкторе по базе данных virtual p_pl_intern_border new_border(p_pl_intern_spline,border_flag); virtual p_pl_intern_body new_body(geophys_params&); void reflect_ray_from_border_to_border (ray*,int J,int K); void prepare_reflected_rays (); void push_body (int ib); int GetNumHitBorder(int j, const IntAr& iaBordersToExec, const rays& arRaysToExec, const IntAr& iaCrossingsToExec); // fern int GetNumClosestRay(const rays& arRaysToExec,const IntAr& iaCrossingsToExec, int iNewBorder); // fern Logic extend_parallel (point pOnBorder, border_hit_info* pbhi); void extend_ray_to_border (ray* prToPass, int iNewBorder, int iBodyN, crossing*cStart, border_hit_info* pbhi=NULL); void pass_body (p_pl_straight_body pBCurrent); void init_shot_point (const point& pShotPoint,int ik); void init_straight_tracing_process (const point &pShotPoint,int ik); void init_reflected_tracing_process (int ik); rays* get_straight_rays(int iReceiver,double dAcc); void try_to_pass_big_angle(); public: pl_straight_model (const dbItem &dbiWhere); pl_straight_model (pl_model& am); pl_straight_model (); ~pl_straight_model (); // Вообче то это для внутреннего употребления... Logic store_ray_and_node (int iBodN,ray* pr, int iNodeN); // Создание трассы по военным номерам источника и параметрам сейсмограммы StorageID create_trace (int N1,int N2, int iSize,double dDt,double *dComp[3], double* daSignal,int iSigSize,double dAcc, int iWFlags); // Моделирование без создания сейсмической трассы StorageID straight_modeling (int N1,int N2,double dAcc); // Определение первого вступления с разными приемниками void first_break_time (int iN1,int iN2,const point& pReceiver, double& dTime,double dAcc); void first_break_time(int iN1,int iN2,double& dTime); void uw_break_time(int iN1,int iN2,point&pR,int iB,double& dTime,double dA); void trace_reflected(int iUWKind=PM_P); void trace_reflected(int iBorder, int iUWKind); void trace_straight(const point &pShotPoint,int iDWKind); Logic register_receiver(int N1,int N2,point pRP); Logic straight_rays_shot()const; Logic reflected_rays_shot(int iBorder=0)const; virtual const char* class_id(){return "pl_straight_model";}; virtual Logic isDerivedFrom(const char* class_name); }; #endif /* p_straight_model.H */ /* Melnikov George Yu. 31-Jan-2000 */
32  // Ноль - все настреляны, число - одна граница, отр. - ни фига не настреляно
33  int iUWShotFlag;
34 
35  pl_straight_bodies abNewBodies;
36  pl_straight_bodies abNewStraightBodies; // Список новых тел на обработку
37 
38  // Получить однажды отраженный луч источник-приемник с отражением
39  int get_reflected_ray(int,int,ray_parameters,double dAcc);
40 
41  void cover_possible_borders (int iReceiver,rays&,
42  IntAr&,double dAcc) const;
43  void cover_one_border(int iReceiver,int iBR,ray*&rRes,double dAcc)const;
44  // Создание трассы по номеру источника и параметрам сейсмограммы
45  StorageID create_trace (int iReceiver, int iSize,double dDt,double *dComp[3],
46  double* daSignal,int iSigSize,double dAcc,
47  int iWFlags);
48 
49  // Создает различные модельные сейсмограммы в источнике,
50  // возвращает код ошибки
51  StorageID create_iis(int iReciever, meta_iis & miRes,double dAcc,int iWFlags);
52 
53  // Создание трассы по посчитанной мета иис и параметрам сейсмограммы
54  int form_trace (int iSize,double dDt,const meta_iis & miRes,
55  double *dComp[3],double *daSignal,int iSigSize);
56 
57  // Вычисляет время первого вступления в яснокаком приемнике void calculate_first_break (int iN1,int iN2,const point& pReceiver, double& dTime,double dAcc); // Для использования в конструкторе по базе данных virtual p_pl_intern_border new_border(p_pl_intern_spline,border_flag); virtual p_pl_intern_body new_body(geophys_params&); void reflect_ray_from_border_to_border (ray*,int J,int K); void prepare_reflected_rays (); void push_body (int ib); int GetNumHitBorder(int j, const IntAr& iaBordersToExec, const rays& arRaysToExec, const IntAr& iaCrossingsToExec); // fern int GetNumClosestRay(const rays& arRaysToExec,const IntAr& iaCrossingsToExec, int iNewBorder); // fern Logic extend_parallel (point pOnBorder, border_hit_info* pbhi); void extend_ray_to_border (ray* prToPass, int iNewBorder, int iBodyN, crossing*cStart, border_hit_info* pbhi=NULL); void pass_body (p_pl_straight_body pBCurrent); void init_shot_point (const point& pShotPoint,int ik); void init_straight_tracing_process (const point &pShotPoint,int ik); void init_reflected_tracing_process (int ik); rays* get_straight_rays(int iReceiver,double dAcc); void try_to_pass_big_angle(); public: pl_straight_model (const dbItem &dbiWhere); pl_straight_model (pl_model& am); pl_straight_model (); ~pl_straight_model (); // Вообче то это для внутреннего употребления... Logic store_ray_and_node (int iBodN,ray* pr, int iNodeN); // Создание трассы по военным номерам источника и параметрам сейсмограммы StorageID create_trace (int N1,int N2, int iSize,double dDt,double *dComp[3], double* daSignal,int iSigSize,double dAcc, int iWFlags); // Моделирование без создания сейсмической трассы StorageID straight_modeling (int N1,int N2,double dAcc); // Определение первого вступления с разными приемниками void first_break_time (int iN1,int iN2,const point& pReceiver, double& dTime,double dAcc); void first_break_time(int iN1,int iN2,double& dTime); void uw_break_time(int iN1,int iN2,point&pR,int iB,double& dTime,double dA); void trace_reflected(int iUWKind=PM_P); void trace_reflected(int iBorder, int iUWKind); void trace_straight(const point &pShotPoint,int iDWKind); Logic register_receiver(int N1,int N2,point pRP); Logic straight_rays_shot()const; Logic reflected_rays_shot(int iBorder=0)const; virtual const char* class_id(){return "pl_straight_model";}; virtual Logic isDerivedFrom(const char* class_name); }; #endif /* p_straight_model.H */ /* Melnikov George Yu. 31-Jan-2000 */
58  void calculate_first_break (int iN1,int iN2,const point& pReceiver,
59  double& dTime,double dAcc);
60 
61  // Для использования в конструкторе по базе данных virtual p_pl_intern_border new_border(p_pl_intern_spline,border_flag); virtual p_pl_intern_body new_body(geophys_params&); void reflect_ray_from_border_to_border (ray*,int J,int K); void prepare_reflected_rays (); void push_body (int ib); int GetNumHitBorder(int j, const IntAr& iaBordersToExec, const rays& arRaysToExec, const IntAr& iaCrossingsToExec); // fern int GetNumClosestRay(const rays& arRaysToExec,const IntAr& iaCrossingsToExec, int iNewBorder); // fern Logic extend_parallel (point pOnBorder, border_hit_info* pbhi); void extend_ray_to_border (ray* prToPass, int iNewBorder, int iBodyN, crossing*cStart, border_hit_info* pbhi=NULL); void pass_body (p_pl_straight_body pBCurrent); void init_shot_point (const point& pShotPoint,int ik); void init_straight_tracing_process (const point &pShotPoint,int ik); void init_reflected_tracing_process (int ik); rays* get_straight_rays(int iReceiver,double dAcc); void try_to_pass_big_angle(); public: pl_straight_model (const dbItem &dbiWhere); pl_straight_model (pl_model& am); pl_straight_model (); ~pl_straight_model (); // Вообче то это для внутреннего употребления... Logic store_ray_and_node (int iBodN,ray* pr, int iNodeN); // Создание трассы по военным номерам источника и параметрам сейсмограммы StorageID create_trace (int N1,int N2, int iSize,double dDt,double *dComp[3], double* daSignal,int iSigSize,double dAcc, int iWFlags); // Моделирование без создания сейсмической трассы StorageID straight_modeling (int N1,int N2,double dAcc); // Определение первого вступления с разными приемниками void first_break_time (int iN1,int iN2,const point& pReceiver, double& dTime,double dAcc); void first_break_time(int iN1,int iN2,double& dTime); void uw_break_time(int iN1,int iN2,point&pR,int iB,double& dTime,double dA); void trace_reflected(int iUWKind=PM_P); void trace_reflected(int iBorder, int iUWKind); void trace_straight(const point &pShotPoint,int iDWKind); Logic register_receiver(int N1,int N2,point pRP); Logic straight_rays_shot()const; Logic reflected_rays_shot(int iBorder=0)const; virtual const char* class_id(){return "pl_straight_model";}; virtual Logic isDerivedFrom(const char* class_name); }; #endif /* p_straight_model.H */ /* Melnikov George Yu. 31-Jan-2000 */
62  virtual p_pl_intern_border new_border(p_pl_intern_spline,border_flag);
63  virtual p_pl_intern_body new_body(geophys_params&);
64 
65  void reflect_ray_from_border_to_border (ray*,int J,int K);
66  void prepare_reflected_rays ();
67  void push_body (int ib);
68  int GetNumHitBorder(int j, const IntAr& iaBordersToExec,
69  const rays& arRaysToExec, const IntAr& iaCrossingsToExec); // fern
70  int GetNumClosestRay(const rays& arRaysToExec,const IntAr& iaCrossingsToExec,
71  int iNewBorder); // fern
72  Logic extend_parallel (point pOnBorder, border_hit_info* pbhi);
73  void extend_ray_to_border (ray* prToPass, int iNewBorder, int iBodyN,
74  crossing*cStart,
75  border_hit_info* pbhi=NULL);
76  void pass_body (p_pl_straight_body pBCurrent);
77  void init_shot_point (const point& pShotPoint,int ik);
78  void init_straight_tracing_process (const point &pShotPoint,int ik);
79  void init_reflected_tracing_process (int ik);
80  rays* get_straight_rays(int iReceiver,double dAcc);
81 
82  void try_to_pass_big_angle();
83 public:
84  pl_straight_model (const dbItem &dbiWhere);
88 
89  // Вообче то это для внутреннего употребления...
90  Logic store_ray_and_node (int iBodN,ray* pr, int iNodeN);
91 
92  // Создание трассы по военным номерам источника и параметрам сейсмограммы
93  StorageID create_trace (int N1,int N2, int iSize,double dDt,double *dComp[3],
94  double* daSignal,int iSigSize,double dAcc,
95  int iWFlags);
96  // Моделирование без создания сейсмической трассы
97  StorageID straight_modeling (int N1,int N2,double dAcc);
98 
99  // Определение первого вступления с разными приемниками void first_break_time (int iN1,int iN2,const point& pReceiver, double& dTime,double dAcc); void first_break_time(int iN1,int iN2,double& dTime); void uw_break_time(int iN1,int iN2,point&pR,int iB,double& dTime,double dA); void trace_reflected(int iUWKind=PM_P); void trace_reflected(int iBorder, int iUWKind); void trace_straight(const point &pShotPoint,int iDWKind); Logic register_receiver(int N1,int N2,point pRP); Logic straight_rays_shot()const; Logic reflected_rays_shot(int iBorder=0)const; virtual const char* class_id(){return "pl_straight_model";}; virtual Logic isDerivedFrom(const char* class_name); }; #endif /* p_straight_model.H */ /* Melnikov George Yu. 31-Jan-2000 */
100  void first_break_time (int iN1,int iN2,const point& pReceiver,
101  double& dTime,double dAcc);
102  void first_break_time(int iN1,int iN2,double& dTime);
103  void uw_break_time(int iN1,int iN2,point&pR,int iB,double& dTime,double dA);
104  void trace_reflected(int iUWKind=PM_P);
105  void trace_reflected(int iBorder, int iUWKind);
106  void trace_straight(const point &pShotPoint,int iDWKind);
107  Logic register_receiver(int N1,int N2,point pRP);
108  Logic straight_rays_shot()const;
109  Logic reflected_rays_shot(int iBorder=0)const;
110 
111  virtual const char* class_id(){return "pl_straight_model";};
112 
113  virtual Logic isDerivedFrom(const char* class_name);
114 };
115 
116 #endif /* p_straight_model.H */
117 /* Melnikov George Yu. 31-Jan-2000 */
Definition: p_raytr_elements.H:113
Definition: p_elements.H:86
Definition: any_elements.H:22
Definition: p_model.H:29
Definition: p_straight_elements.H:9
Definition: p_straight_model.H:14
Definition: p_elements.H:23
Definition: IntAr.H:14
Definition: rays.H:61
Definition: p_elements.H:145
Definition: geometry.H:16
Definition: rays.H:81
Definition: db_container.H:24
Definition: p_straight_elements.H:42
Definition: dbnamedefs.h:85
Definition: p_raytr_model.H:32