Salome HOME
Merging with the MAN_SALOME2 branch
[modules/med.git] / src / MEDMEM_I / MEDMEM_FieldDouble_i.cxx
1 //=============================================================================
2 // File      : MEDMEM_Fielddouble_i.hxx
3 // Project   : SALOME
4 // Author    : EDF 
5 // Copyright : EDF 2002
6 // $Header: /export/home/PAL/MED_SRC/src/MEDMEM_I/MEDMEM_Fielddouble_i.hxx
7 //=============================================================================
8
9 #include "MEDMEM_FieldDouble_i.hxx"
10 #include "utilities.h"
11 #include "MEDMEM_convert.hxx"
12 using namespace MEDMEM;
13
14 //=============================================================================
15 /*!
16  * Default constructor
17  */
18 //=============================================================================
19 FIELDDOUBLE_i::FIELDDOUBLE_i(): FIELDOF_i<double>()
20 {
21         BEGIN_OF("Default Constructor FIELDDOUBLE_i");
22         END_OF("Default Constructor FIELDDOUBLE_i");
23 }
24 //=============================================================================
25 /*!
26  * Destructor
27  */
28 //=============================================================================
29 FIELDDOUBLE_i::~FIELDDOUBLE_i()
30 {
31         BEGIN_OF("Default Destructor FIELDDOUBLE_i");
32         END_OF("Default Destructor FIELDDOUBLE_i");
33 }
34 //=============================================================================
35 /*!
36  * Constructor par recopie
37  */
38 //=============================================================================
39 FIELDDOUBLE_i::FIELDDOUBLE_i(FIELDDOUBLE_i & fd):
40                                FIELDOF_i<double>(fd._fieldTptr)
41 {
42         BEGIN_OF("Default Constructor FIELDDOUBLE_i");
43         END_OF("Default Constructor FIELDDOUBLE_i");
44 }
45 //=============================================================================
46 /*!
47  * Default constructor
48  */
49 //=============================================================================
50 FIELDDOUBLE_i::FIELDDOUBLE_i(SALOME_MED::SUPPORT_ptr mySupportIOR,::FIELD<double> * const f): FIELDOF_i<double>(mySupportIOR,f)
51 {
52         BEGIN_OF("Constructor FIELDDOUBLE_i");
53         END_OF(" Constructor FIELDDOUBLE_i");
54 }
55
56 //=============================================================================
57 /*!
58  * CORBA: Accessor for Field's values
59 */
60 //=============================================================================
61
62 SALOME_MED::double_array* FIELDDOUBLE_i::getValue( SALOME_MED::medModeSwitch mode ) 
63 throw (SALOME::SALOME_Exception)
64 {
65         if (_fieldTptr==NULL)
66                 THROW_SALOME_CORBA_EXCEPTION("No associated Field", \
67                                              SALOME::INTERNAL_ERROR);
68         SALOME_MED::double_array_var myseq = new SALOME_MED::double_array;
69         try
70         {
71                 int nbval=_fieldTptr->getNumberOfComponents();
72
73                 // Ajout NB pour avoir la valeur correct de nbval
74                 SALOME_MED::medEntityMesh entity = _support->getEntity();
75                 if (_support->isOnAllElements())
76                   {
77                     if (entity == SALOME_MED::MED_NODE)
78                       nbval = (_support->getMesh()->getNumberOfNodes())*nbval;
79                     else
80                       nbval = (_support->getMesh()->getNumberOfElements(entity,SALOME_MED::MED_ALL_ELEMENTS))*nbval;
81                   }
82                 else
83                   {
84                     nbval = (_support->getNumberOfElements(SALOME_MED::MED_ALL_ELEMENTS))*nbval;
85                   }
86
87                 medModeSwitch modemed=convertIdlModeToMedMode(mode);
88                 const double * values =_fieldTptr->getValue(modemed);
89
90                 myseq->length(nbval);
91                 for (int i=0; i<nbval; i++)
92                 {
93                         myseq[i]=values[i];
94                 };
95         }
96         catch (MEDEXCEPTION &ex)
97         {
98                 MESSAGE("Unable to acces Field ");
99                 THROW_SALOME_CORBA_EXCEPTION(ex.what(), SALOME::INTERNAL_ERROR);
100         }
101         return myseq._retn();
102 }