Ignore:
Timestamp:
11/17/10 14:40:14 (14 years ago)
Author:
hozdoba
Message:

mise à jour

File:
1 edited

Legend:

Unmodified
Added
Removed
  • XMLIO_V2/dev/dev_rv/src/XMLIO/main.f90

    r134 r137  
    11! --------------------------------------------------- ! 
    2 ! ------------- XMLIO SERVER MAIN TEST  ------------- ! 
     2!               XMLIO SERVER MAIN TEST                ! 
    33! --------------------------------------------------- ! 
    44 
    5 MODULE XTYPE 
    6    IMPLICIT NONE 
    7  
    8    ! Ne jamais modifier les valeurs internes de ce type dans le code fortran. 
    9    TYPE XHandle 
    10       INTEGER :: dtype 
    11       INTEGER :: daddr 
    12    END TYPE XHandle 
    13  
    14    TYPE XDate 
    15       INTEGER :: year, month, day, hour, minute, second 
    16    END TYPE XDate 
    17  
    18    TYPE XDuration 
    19       REAL(kind = 8) :: year, month, day, hour, minute, second 
    20    END TYPE XDuration 
    21  
    22    ! enum XDType 
    23    INTEGER, PARAMETER  :: NOTYPE = 0 
    24    INTEGER, PARAMETER  :: DTREATMENT = 1, DDATE = 2, CALENDAR = 3, ECONTEXT = 4 
    25    INTEGER, PARAMETER  :: EAXIS = 5 , EDOMAIN = 6 , EFIELD = 7 , EFILE = 8 , EGRID = 9 
    26    INTEGER, PARAMETER  :: GAXIS = 10, GDOMAIN = 11, GFIELD = 12, GFILE = 13, GGRID = 14 
    27  
    28    ! enum XFileType 
    29    INTEGER, PARAMETER  :: NETCDF4 = 0 
    30  
    31    ! Autres constantes 
    32    TYPE(XHandle)  , PARAMETER :: NULLHANDLE = XHandle(0, 0) 
    33    TYPE(XDuration), PARAMETER :: NONEDUR    = XDuration(0., 0., 0., 0., 0., 0.) 
    34  
    35 END MODULE XTYPE 
    36  
    37 MODULE IXHANDLE 
    38  
    39    INTERFACE 
    40  
    41       SUBROUTINE xios_handle_create(ret, dtype, idt) 
    42          USE XTYPE 
    43          TYPE(XHandle), INTENT(OUT) :: ret 
    44          INTEGER      , INTENT(IN)  :: dtype 
    45          CHARACTER*(*), INTENT(IN)  :: idt 
    46       END SUBROUTINE xios_handle_create 
    47  
    48    END INTERFACE 
    49  
    50 END MODULE IXHANDLE 
    51  
    52 MODULE IXML 
    53    IMPLICIT NONE 
    54    INTERFACE 
    55  
    56       SUBROUTINE xios_xml_Parse_File(filename) 
    57          CHARACTER*(*), INTENT(IN) :: filename 
    58       END SUBROUTINE xios_xml_Parse_File 
    59  
    60       SUBROUTINE xios_xml_Parse_String(xmlcontent) 
    61          CHARACTER*(*), INTENT(IN) :: xmlcontent 
    62       END SUBROUTINE xios_xml_Parse_String 
    63  
    64    END INTERFACE 
    65 END MODULE IXML 
    66  
    67 MODULE ICONTEXT 
    68    IMPLICIT NONE 
    69    INTERFACE 
    70  
    71       SUBROUTINE xios_context_set_current(context, withswap) 
    72          USE XTYPE 
    73          TYPE(XHandle),     INTENT(IN) :: context 
    74          LOGICAL, OPTIONAL, INTENT(IN) :: withswap 
    75       END SUBROUTINE xios_context_set_current 
    76  
    77       SUBROUTINE xios_context_get_current(context) 
    78          USE XTYPE 
    79          TYPE(XHandle), INTENT(IN) :: context 
    80       END SUBROUTINE xios_context_get_current 
    81  
    82       SUBROUTINE xios_context_get_calendar(context, calend) 
    83          USE XTYPE 
    84          TYPE(XHandle), INTENT(IN)  :: context 
    85          TYPE(XHandle), INTENT(OUT) :: calend 
    86       END SUBROUTINE xios_context_get_calendar 
    87  
    88    END INTERFACE 
    89  
    90 END MODULE ICONTEXT 
    91  
    92 MODULE ICALENDAR 
    93    IMPLICIT NONE 
    94    INTERFACE 
    95  
    96       SUBROUTINE xios_calendar_set_timestep(calend, dur) 
    97          USE XTYPE 
    98          TYPE(XHandle)  , INTENT(IN) :: calend 
    99          TYPE(XDuration), INTENT(IN) :: dur 
    100       END SUBROUTINE xios_calendar_set_timestep 
    101  
    102    END INTERFACE 
    103  
    104 END MODULE ICALENDAR 
    105  
    106 MODULE IDATATREATMENT 
    107    IMPLICIT NONE 
    108    INTERFACE 
    109  
    110       SUBROUTINE xios_dtreatment_new(dt, context) 
    111          USE XTYPE 
    112          TYPE(XHandle), INTENT(OUT) :: dt 
    113          TYPE(XHandle), INTENT(IN)  :: context 
    114       END SUBROUTINE xios_dtreatment_new 
    115  
    116       SUBROUTINE xios_dtreatment_create_files_and_headers(dt, ftype) 
    117          USE XTYPE 
    118          TYPE(XHandle), INTENT(IN) :: dt 
    119          INTEGER      , INTENT(IN) :: ftype 
    120       END SUBROUTINE xios_dtreatment_create_files_and_headers 
    121  
    122    END INTERFACE 
    123 END MODULE IDATATREATMENT 
    124  
    1255PROGRAM MAIN 
    126    USE XTYPE 
    1276   USE IXHANDLE 
    1287   USE IXML 
     8   USE IXMLTREE 
    1299   USE ICONTEXT 
     10   USE ICALENDAR 
     11   USE IEXTENDED 
    13012   USE IDATATREATMENT 
    131    USE ICALENDAR 
    13213 
    133    IMPLICIT NONE 
     14   INTEGER       :: compt = 0 
    13415 
    135    INTEGER         :: compt 
    136    TYPE(XHandle)   :: context1    = NULLHANDLE 
    137    TYPE(XHandle)   :: dtreat      = NULLHANDLE 
    138    TYPE(XHandle)   :: calend      = NULLHANDLE 
     16   TYPE(XHandle) :: nemo_style_ctxt     = NULLHANDLE, & 
     17                    orchidee_style_ctxt = NULLHANDLE, & 
     18                    lmdz_style_ctxt     = NULLHANDLE 
     19 
     20   TYPE(XHandle) :: temp_mod  = NULLHANDLE, & 
     21                    temp_mod_ = NULLHANDLE 
     22 
     23   ! Axes verticaux 
     24   REAL(kind = 8), DIMENSION(10) :: vaxis  = (/(i, i=1, 10)/) 
     25                                    !vvaxis = (/(i, i=1, 5)/) 
     26 
     27   ! Domaines horizontaux 
     28   REAL(kind = 8), DIMENSION(20) :: lonrect_orch0  = (/(i, i=11, 30)/),& 
     29                                    latrect_orch0  = (/(i, i=11, 30)/) 
     30 
     31   REAL(kind = 8), DIMENSION(10,10) :: loncurv_nemo0  = 1, & 
     32                                       latcurv_nemo0  = 1 
     33 
     34   ! Les durées 
    13935   TYPE(XDuration) :: timestep_1h = XDuration(0., 0., 0., 1., 0., 0.) 
     36                      !timestep_2h = XDuration(0., 0., 0., 2., 0., 0.) 
     37 
     38   ! Les masques 
     39   LOGICAL(kind = 1), DIMENSION(20, 20) :: mask0  = .TRUE._1 
     40 
     41   CHARACTER(len = *), PARAMETER :: filename = & 
     42            "/local/XMLIOSERVER_DEV/dev_rv/test/iodef_simple_test.xml" 
     43 
     44   !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! 
    14045 
    14146   ! Parsing du document xml depuis un fichier situé sur le disque. 
    142    CALL xios_xml_Parse_File("/local/XMLIOSERVER_DEV/dev_rv/test/iodef_simple_test.xml") 
     47   CALL xml_Parse_File(filename) 
    14348 
    144    ! Le calendrier doit être initialisé ici s'il ne l'a pas déjà été depuis le document xml. 
     49   ! Création de handle sur les contextes exstants dans lequels on souhaite travailler. 
     50   CALL handle_create(nemo_style_ctxt, ECONTEXT, "nemo_style") 
     51   CALL context_set_current(nemo_style_ctxt) 
    14552 
    146    ! Création d'un handle sur le contexte dans lequel on souhaite travailler, càd 'context1' ici. 
    147    CALL xios_handle_create(context1, ECONTEXT, "context1") 
    148    iF ((context1%dtype == 0) .AND. (context1%daddr == 0)) THEN 
    149       PRINT *, "Impossible de créer un handle sur l'élément context1 !" 
    150       STOP 
    151    END IF 
     53   CALL handle_create(temp_mod, EDOMAIN,  "domaine0") 
     54      CALL xml_domain_addAttribut(domain_hdl    = temp_mod,      & 
     55                                  lonvalue_curv = loncurv_nemo0, & 
     56                                  latvalue_curv = latcurv_nemo0, & 
     57                                  domtype       = "curvilinear") 
     58 
     59   CALL handle_create(lmdz_style_ctxt, ECONTEXT, "lmdz_style") 
     60   CALL context_set_current(lmdz_style_ctxt) 
     61 
     62   !!!!!!!!!!!!!!!!!!!! EXEMPLE RECONSTRUCTION !!!!!!!!!!!!!!!!!!!!! 
     63   ! On crée un nouveau context et on lui associe un handle. 
     64   CALL context_create(context_hdl   = orchidee_style_ctxt, & 
     65                       context_id    = "orchidee_style",    & 
     66                       calendar_type = GREGORIAN) 
     67 
     68   ! ---------> field_définition 
     69   CALL handle_create(temp_mod, GFIELD,  "field_definition") 
     70      CALL xml_tree_add(parent_hdl = temp_mod,        & 
     71                        child_hdl  = temp_mod_,       & 
     72                        child_type = GFIELD,          & 
     73                        child_id   = "ss_fieldgroup") 
     74      CALL xml_group_field_addAttribut(gfield_hdl = temp_mod_, & 
     75                                       flevel     = 1,         & 
     76                                       fprec      = 4,         & 
     77                                       fenabled   = .TRUE._1) 
     78         CALL xml_tree_add(parent_hdl = temp_mod_,    & 
     79                           child_hdl  = temp_mod ,    & 
     80                           child_type = EFIELD,       & 
     81                           child_id   = "field0") 
     82         CALL xml_field_addAttribut(field_hdl      = temp_mod,       & 
     83                                    fname          = "field0_name",  & 
     84                                    fstandard_name = "field0_sname", & 
     85                                    flong_name     = "field0_lname", & 
     86                                    funit          = "Pa",           & 
     87                                    foperation     = "inst",         & 
     88                                    ffreq_op       = timestep_1h,    & 
     89                                    fgrid_ref      = "grid0") 
     90   ! ---------> axis_définition 
     91   CALL handle_create(temp_mod, GAXIS,   "axis_definition") 
     92      CALL xml_tree_add(parent_hdl = temp_mod,        & 
     93                        child_hdl  = temp_mod_,       & 
     94                        child_type = GAXIS,           & 
     95                        child_id   = "ss_axisgroup") 
     96      CALL xml_group_axis_addAttribut(gaxis_hdl = temp_mod_, & 
     97                                      aunit     = "SI") 
     98         CALL xml_tree_add(parent_hdl = temp_mod_,    & 
     99                           child_hdl  = temp_mod ,    & 
     100                           child_type = EAXIS,        & 
     101                           child_id   = "axis0") 
     102         CALL xml_axis_addAttribut(axis_hdl       = temp_mod,             & 
     103                                   aname          = "saxev",              & 
     104                                   astandard_name = "saxev",              & 
     105                                   along_name     = "Simple axe vertical",& 
     106                                   avalue         = vaxis) 
     107 
     108   ! ---------> domain_définition 
     109   CALL handle_create(temp_mod, GDOMAIN, "domain_definition") 
     110      CALL xml_tree_add(parent_hdl = temp_mod,        & 
     111                        child_hdl  = temp_mod_,       & 
     112                        child_type = GDOMAIN,         & 
     113                        child_id   = "ss_domaingroup") 
     114      CALL xml_group_domain_addAttribut(gdomain_hdl = temp_mod_, & 
     115                                        ni_glo      = 40,        & 
     116                                        nj_glo      = 40) 
     117         CALL xml_tree_add(parent_hdl = temp_mod_,    & 
     118                           child_hdl  = temp_mod ,    & 
     119                           child_type = EDOMAIN,      & 
     120                           child_id   = "domain0") 
     121         CALL xml_domain_addAttribut(domain_hdl     = temp_mod,             & 
     122                                     dname          = "Compressee",         & 
     123                                     dstandard_name = "DomOrchTest",        & 
     124                                     dlong_name     = "Test type orchidee", & 
     125                                     ibegin         = 10,                   & 
     126                                     iend           = 31,                   & 
     127                                     jbegin         = 10,                   & 
     128                                     jend           = 31,                   & 
     129                                     mask           = mask0,                & 
     130                                     data_dim       = 1,                    & 
     131                                     data_ni        = 400,                  & 
     132                                     data_ibegin    = 1,                    & 
     133                                     lonvalue_rect  = lonrect_orch0,        & 
     134                                     latvalue_rect  = latrect_orch0,        & 
     135                                     domtype        = "rectilinear") 
     136 
     137   ! ---------> file_définition 
     138   CALL handle_create(temp_mod, GFILE,   "file_definition") 
     139      CALL xml_tree_add(parent_hdl = temp_mod,        & 
     140                        child_hdl  = temp_mod_,       & 
     141                        child_type = GFILE) 
     142      CALL xml_group_file_addAttribut(gfile_hdl = temp_mod_,   & 
     143                                      fofreq   = timestep_1h,  & 
     144                                      folevel   = 2,           & 
     145                                      fenabled  = .TRUE._1) 
     146         CALL xml_tree_add(parent_hdl = temp_mod_,    & 
     147                           child_hdl  = temp_mod ,    & 
     148                           child_type = EFILE,        & 
     149                           child_id   = "file0") 
     150         CALL xml_file_addAttribut(file_hdl     = temp_mod,                      & 
     151                                   fname        = "data/orchidee_test.nc",       & 
     152                                   fdescription = "Test sur grille type orchidee") 
     153            CALL xml_tree_add(parent_hdl = temp_mod , & 
     154                              child_hdl  = temp_mod_, & 
     155                              child_type = EFIELD) 
     156            CALL xml_field_addAttribut(field_hdl  = temp_mod_, & 
     157                                       ffield_ref = "field0") 
     158 
     159   ! ---------> grid_définition 
     160   CALL handle_create(temp_mod, GGRID,   "grid_definition") 
     161      CALL xml_tree_add(parent_hdl = temp_mod,        & 
     162                        child_hdl  = temp_mod_,       & 
     163                        child_type = GGRID,           & 
     164                        child_id   = "ss_gridgroup") 
     165      CALL xml_group_grid_addAttribut(ggrid_hdl    = temp_mod_, & 
     166                                      gdomain_ref  = "domain0", & 
     167                                      gaxis_ref    = "axis0"); 
     168         CALL xml_tree_add(parent_hdl = temp_mod_,    & 
     169                           child_hdl  = temp_mod ,    & 
     170                           child_type = EGRID,        & 
     171                           child_id   = "grid0") 
     172         CALL xml_grid_addAttribut(grid_hdl     = temp_mod,           & 
     173                                   gname        = "GRectiCompressee", & 
     174                                   gdescription = "Grille orchidee"); 
     175 
     176   !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! 
     177 
     178   ! Affichage de l'arbre xml au niveau de la sortie. 
     179   CALL xml_tree_show("xmlio_tree_prev.log") 
     180   ! CALL xml_tree_show() 
    152181 
    153182   ! ----------- Début du traitement ----------- ! 
    154  
    155    CALL xios_context_set_current(context1, .TRUE.) 
    156  
    157    ! Création et initialisation d'une instance de traitement des données dans 'context1'. 
    158    CALL xios_dtreatment_new(dtreat, context1) 
    159    iF ((dtreat%dtype == 0) .AND. (dtreat%daddr == 0)) THEN 
    160       PRINT *, "Impossible d'initialiser l'instance de traitement !" 
    161       STOP 
    162    END IF 
    163  
    164    ! Création des fichiers et des entêtes dans le contexte. 
    165    CALL xios_dtreatment_create_files_and_headers(dtreat, NETCDF4) 
    166  
    167    ! On récupére le calendrier associé au contexte en cours de traitement. 
    168    CALL xios_context_get_calendar(context1, calend) 
    169    iF ((calend%dtype == 0) .AND. (calend%daddr == 0)) THEN 
    170       PRINT *, "Impossible de récupérer le calendrier !" 
    171       STOP 
    172    END IF 
    173  
    174    ! On change la durée du timestep. 
    175    CALL xios_calendar_set_timestep(calend, timestep_1h) 
     183   ! On choisit le context dans lequel on va travailler et on commence le traitement des données. 
     184   CALL dtreatment_start(orchidee_style_ctxt, NETCDF4) 
    176185 
    177186   ! Exécution de la boucle de calcul-écriture. 
     
    180189   END DO 
    181190 
     191   ! Affichage de l'arbre xml au niveau de la sortie. 
     192   CALL xml_tree_show("xmlio_tree_next.log") 
     193 
    182194END PROGRAM MAIN 
Note: See TracChangeset for help on using the changeset viewer.